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

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

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

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

 

解决办法:修改类路径来调整顺序或是调整包引入顺序
 
测试版本:spring boot 2.1.4.RELEASE
相关文章
相关标签/搜索