一尘不染

如何以其他配置为条件的配置?

spring-boot

我想让我的spring-boot配置类A依赖于另一个配置类B,即A仅在B评估配置时才评估配置。

在实际情况下,我有数百种Ai配置,只有一种B,并且我想Ai通过仅B在测试期间排除的方式来实现一种排除所有配置的方式。

我尝试了以下方法:

@Configuration
@ConditionalOnBean(type = "org.my.B")
public class A1AutoConfiguration {
// ...
}

哪里B无条件的 配置类。

但是,当我跑mvn spring-boot:run -Ddebug=true我看到,A永远不会计算
,因为B缺少。虽然在内部创建的Bean B在应用程序上下文中,但B本身不在。

虽然我可以使Ai配置类依赖于 内部创建的bean, B但是我不太喜欢这种解决方案。

有没有更清洁(且可行)的方式来实现这种依赖机制?


阅读 302

收藏
2020-05-30

共1个答案

一尘不染

关键是要确保正确订购商品。如果您不能确保首先评估B,则要求A仅在存在B的情况下才适用。

数百部分使我有些害怕。如果As和B是自动配置,则可以使用以下命令

@AutoconfigureAfter(B.class)
@ConditionalOnBean(B.class)
public class A123AutoConfiguration { ...}

如果As和B不是自动配置,则需要确保先处理B,以便您不能依赖于常规的类路径扫描。

2020-05-30