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

标签 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();
  }
}

最佳答案

您可以尝试使用@Conditional来代替使用@Profile方法来获得conditional Bean 创建。

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

关于java - Spring @Profile 适用于类,但不适用于 @Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31944152/

相关文章:

java - Spring 安全: AccessDecisionVoter

java - 在 Spring MVC 中使用表单按钮时遇到问题

java - 一键下载多个文件 primefaces

java - 平滑 Android 游戏循环

java - 无法存储作业 : Driver's Blob representation is of an unsupported type: oracle. sql.BLOB [请参阅嵌套异常 : java. sql.SQLException

java - 为 Spring @Scheduled 提供时区?

spring-mvc - 以编程方式配置 ResourceBundleMessageSource

java - 将两个@GetMapping映射到同一个@RestController到Spring Boot中

java - 如何使用Jsoup从html中提取指定长度的纯文本?

java - Struts 2 应用程序在通过管理控制台部署时出错