我无法让 @Profile
在 @Bean
上工作,但它在 @Configuration
类上工作正常。在我的模块测试中,我在第一个示例中正确地自动连接了 MyServiceStub
,但在第二个示例中却没有。
有谁知道为什么吗?
这有效:
MyConfig.java
@Configuration
@Import({StubConfig.class, RealConfig.class}
public class MyConfig {}
StubConfig.java
@Profile({"featureTest", "moduleTest"})
@Configuration
public class StubConfig {
@Bean
public MyService myService() {
return new MyServiceStub();
}
}
RealConfig.java
@Profile({"!featureTest", "!moduleTest"})
@Configuration
public class RealConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
但这不起作用:
MyConfig.java
@Configuration
public class MyConfig {
@Bean
@Profile({"featureTest", "moduleTest"})
public MyService myServiceStub() {
return new MyServiceStub();
}
@Bean
@Profile({"!featureTest", "!moduleTest"})
public MyService myService() {
return new MyService();
}
}
最佳答案
您可以尝试使用@Conditional来代替使用@Profile方法来获得conditional Bean 创建。
或者使用显式的 if-stmt
来检查 activeProfile 是什么。 。并且您可以根据 activeProfile 创建 Bean 实例。我认为这种方法可以反射(reflect)使用 Spring XML 的表达语言可以完成的工作。但 @Conditional 似乎更适合你。
关于java - Spring @Profile 适用于类,但不适用于 @Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31944152/