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