我想让我的spring-boot配置类A
依赖于另一个配置类B
,即仅在评估A
配置时评估B
配置。 / p>
在真实环境中,我有数百个Ai
配置,只有一个B
,我想通过仅排除{{1}来实现排除所有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,但我不太喜欢这个解决方案。
是否有更清洁(和工作)的方式来实现这种依赖机制?
答案 0 :(得分:4)
关键是要确保正确订购。如果您不能确保首先评估B,那么请求A仅在B存在时才有意义。
数百部分让我感到害怕。如果As和B是自动配置,则可以使用以下@AutoconfigureAfter(B.class)
@ConditionalOnBean(B.class)
public class A123AutoConfiguration { ...}
如果As和B不是自动配置,则需要确保首先处理B,这样就不能依赖常规的类路径扫描。
答案 1 :(得分:0)
我想说这样的bean组适合于单独的库或子模块,因此它们是独立的。包含机制可以是对这种库或子模块的根包进行组件扫描。
其他选项是使用Spring配置文件。使用@Profile
annotation标记您的咖啡豆并使用@ActiveProfiles
to enable certain group of beans during test。