关于使用@Bean注解注入bean导致ConditionOnMissBean和 ConditionOnBean 注解有时候会失效的问题
ae5594dca141eb0ae5c35a974e3a8391574.jpg
文档上提示,需要注意bean添加的顺序,因为该条件是根据当前加载的内容来判断是否符合,也就是说如果 @ConditionalOnBean 和 @ConditionalOnMissingBean 被提前加载,条件将无法成立,我们得保证bean Conditions被后加载,才会生效。
 
重点: 这里我们可能会想到使用@Order或是@AutoConfigureOrder注解来调整顺序,很遗憾,无法调整顺序,condition相关的处理是在包扫描的时候执行的,所以这里的顺序只根包扫描的顺序有关,而包扫描的顺序依赖包名和类名的字符排序,而 @AutoConfigureOrder只能调整bean的注入顺序,但是判断是否应该注入的Condition是被提前处理掉了的。

跟maven的pom中包引入的顺序也有关系,先引入的先扫描到 

引入的两个包中都有@ConditionalOnMissingBean,先引入的包,先执行

 

解决办法:修改类路径来调整顺序或是调整包引入顺序
 
测试版本:spring boot 2.1.4.RELEASE

转载于:https://my.oschina.net/u/1428688/blog/3044014

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐