1

我有一个@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 类之后执行的。这完全是我的问题。

4

1 回答 1

2

这和这解释了为什么这是不可能的:

于 2017-07-11T12:40:44.733 回答