Spring里遇到的一个问题,autowired时报找不到bean定义

本文记录了一次Spring项目中因循环依赖导致无法实例化Bean的问题排查过程。通过细致地检查和服务定位,最终发现了问题根源在于一个Service接口的实现类错误地引用了自身。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.cnblogs.com/btbear/p/3824960.html


有个工程师,在项目工程里加了些页面和Service,Dao之类,然后启动web工程,Spring一直报错说找不到autowired定义的service接口的实现bean的定义,然后来求助我来帮忙解决。

   我理所当然的按照常规步骤1,2,3...检查他的代码是否存在问题:

  • 第一步,检查service接口是否确实有实现类并且@Service标注了,这个是初学者让出现问题,检查结果确实没问题Pass。

  • 第二布,因为其service定义在新的package里,遂检查其spring配置里,component-scan是否新增加了扫描package,检查结果确实没问题Pass。

  • 第三步,怀疑Eclipse开发环境里,运行tomcat的时候,没有publish成功,确认workspace里是自动build,并且clean & Rebuild,在clean tomcat server,问题依旧。

  • 第四步,还是怀疑Eclipse开发环境里,运行tomcat的时候,没有publish成功,遂检查workspace的的.metadata/.plugins/org.eclipse.wst.server.core里所发布的内容,检查结果确实class已经publish过去没问题,Pass。

  • 第五步,检查Web工程里的Deployment Assembly,配置正确没问题,Pass。

   逐步检查下来,常规的错误貌似都没有犯,但怎么clean,再启动依然报错,找到Service接口,Ctrl+T,确实找到实现类,并且@Service标注。问题查到这里就有点奇怪了,这样问题以前貌似没碰到过。

    有问题不能不解决,继续琢磨,Ctrl+G找Service所有引用,发现有两个地方被使用@Autowared注入,然后,然后,然后,点其中一个引用的地方,Ctrl+T找其实现类,很神奇的发现,光标就跳到引用这个service的类本身上。OMG,Finally,原来该Service的实现Bean在引用自身Service,结果循环引用导致无法实例化Bean而报出这个错误。对于一个中高级工程师来说,犯这个错误,我只能一顿痛扁,挣一顿免费晚餐,你,是否也曾经犯过这个傻呢......Spring里遇到的一个傻问题,autowired时报找不到bean定

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值