有个工程师,在项目工程里加了些页面和Service,Dao之类,而后启动web工程,Spring一直报错说找不到autowired定义的service接口的实现bean的定义,而后来求助我来帮忙解决。web
我理所固然的按照常规步骤1,2,3...检查他的代码是否存在问题:spring
第一步,检查service接口是否确实有实现类而且@Service标注了,这个是初学者让出现问题,检查结果确实没问题Pass。tomcat
第二布,由于其service定义在新的package里,遂检查其spring配置里,component-scan是否新增长了扫描package,检查结果确实没问题Pass。eclipse
第三步,怀疑Eclipse开发环境里,运行tomcat的时候,没有publish成功,确认workspace里是自动build,而且clean & Rebuild,在clean tomcat server,问题依旧。ui
第四步,仍是怀疑Eclipse开发环境里,运行tomcat的时候,没有publish成功,遂检查workspace的的.metadata/.plugins/org.eclipse.wst.server.core里所发布的内容,检查结果确实class已经publish过去没问题,Pass。spa
第五步,检查Web工程里的Deployment Assembly,配置正确没问题,Pass。component
逐步检查下来,常规的错误貌似都没有犯,但怎么clean,再启动依然报错,找到Service接口,Ctrl+T,确实找到实现类,而且@Service标注。问题查到这里就有点奇怪了,这样问题之前貌似没碰到过。server
有问题不能不解决,继续琢磨,Ctrl+G找Service全部引用,发现有两个地方被使用@Autowared注入,而后,而后,而后,点其中一个引用的地方,Ctrl+T找其实现类,很神奇的发现,光标就跳到引用这个service的类自己上。OMG,Finally,原来该Service的实现Bean在引用自身Service,结果循环引用致使没法实例化Bean而报出这个错误。对于一个中高级工程师来讲,犯这个错误,我只能一顿痛扁,挣一顿免费晚餐,你,是否也曾经犯过这个傻呢......
接口