商丘企业网站建设公司,做网站一定要代码吗,网站内部链接有什么作用,深圳画册设计印刷公司1、背景
在写代码时#xff0c;发现service接口有两个实现类#xff0c;并且两个实现类中没有对类名重命名#xff0c;属性注入的时候也没有使用byName或Qualifier#xff0c;正确情况下会发生多实现报错的问题#xff0c;以前对这个问题进行解析过。 2、调试过程
我想…1、背景
在写代码时发现service接口有两个实现类并且两个实现类中没有对类名重命名属性注入的时候也没有使用byName或Qualifier正确情况下会发生多实现报错的问题以前对这个问题进行解析过。 2、调试过程
我想通过直接从IOC容器获取接口类型的实现类看看有几个所以添加了如下代码发现只有一个实现类查看没有注入的类发现是抽象类。
3、结论
通过查阅类扫描加载部分代码发现ClassPathScanningCandidateComponentProvider类中findCandidateComponents方法。如果是抽象类的话类中方法上有Lookup注解才能被注入ioc容器注解只能使用在方法上在方法上加入注解后重新启动果然报错了说明此抽象方法被注入Ioc容器有兴趣的朋友可以打断点看看ClassPathScanningCandidateComponentProvider在什么时候创建findCandidateComponents什么时候调用的。