我有一个@Configuration
带有FOO @Bean
注释的 java 类,@ConditionalOnBean(BAR.class).
因为我希望导入器项目提供或不提供这个 bean,它在我的项目中的任何地方都不存在。
在我的集成测试中,我Bar.class
通过@MockBeans
. 但是由于某种原因 Spring-Boot -debug 告诉我它没有找到它,所以我的条件 bean 没有被加载。
我几乎可以肯定这种情况过去可以正常工作,但是我是否配置了任何额外的东西?我无法让它工作
PS>我发现在与条件相同的@Configuration 中手动重新注册@Bean 也看不到它!有没有与他有关的已知错误?
自动回复:本案的罪魁祸首是
您需要非常小心添加 bean 定义的顺序,因为这些条件是根据到目前为止已处理的内容进行评估的。出于这个原因,我们建议仅在自动配置类上使用 @ConditionalOnBean 和 @ConditionalOnMissingBean 注释(因为在添加任何用户定义的 bean 定义后保证加载这些注释)。
P.S2> 我意识到 Bar.class 是一个接口,但我不明白为什么只要存在实现它就不能工作
P.S3> 我发现 MockitoTestExecutionListener 是在 OnBeanCondition 类之后执行的。这完全是我的问题。