Spring @Profile适用于类,但不适用于@Bean

时间:2015-08-11 14:10:46

标签: java spring spring-mvc

我无法让@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();
  }
}

1 个答案:

答案 0 :(得分:-2)

您可以尝试使用@Conditional来创建conditional bean,而不是使用@Profile方法。

或明确if-stmt来检查activeProfile是什么。您可以根据activeProfile创建Bean实例。我认为这种方法可以反映使用表达式语言在Spring XML中可以完成的工作。但@Conditional似乎更适合你。