spring boot 中 @ConditionalOnMissingBean和@ConditionalOnBean注解注意事项

关于使用@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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值