我是一名春季新手,并试图从简单的'profile'处理Spring的优点中受益。我已经完成了本教程:https://spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile,现在我想将这个概念适应一个简单的例子。 我有两个配置文件:dev
和prod
。我想象一个@Configuration
类,每个配置文件可以实例化不同的bean(分别实现一个通用接口),具体取决于设置的配置文件。多弹簧配置文件(每个配置文件一个)
我目前使用的类是这样的:
StatusController.java
@RestController
@RequestMapping("/status")
public class StatusController {
private final EnvironmentAwareBean environmentBean;
@Autowired
public StatusController(EnvironmentAwareBean environmentBean) {
this.environmentBean = environmentBean;
}
@RequestMapping(method = RequestMethod.GET)
Status getStatus() {
Status status = new Status();
status.setExtra("environmentBean=" + environmentBean.getString());
return status;
}
}
EnvironmentAwareBean.java
public interface EnvironmentAwareBean {
String getString();
}
EnvironmentAwareBean.java
@Service
public class DevBean implements EnvironmentAwareBean {
@Override
public String getString() {
return "development";
}
}
EnvironmentAwareBean.java
@Service
public class ProdBean implements EnvironmentAwareBean {
@Override
public String getString() {
return "production";
}
}
DevConfig.java
@Configuration
@Profile("dev")
public class DevConfig {
@Bean
public EnvironmentAwareBean getDevBean() {
return new DevBean();
}
}
ProdConfig.java
@Configuration
@Profile("prod")
public class ProdConfig {
@Bean
public EnvironmentAwareBean getProdBean() {
return new ProdBean();
}
}
运行示例抛出启动过程中此异常(SPRING_PROFILES_DEFAULT
设置为dev
):
(...)UnsatisfiedDependencyException:(...)嵌套的例外是org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有合格豆类型[EnvironmentAwareBean]被定义为:期望的单个匹配bean,但找到3:prodBean,devBean,getDevBean
我的方法远离推荐的配置吗?在我看来,使用@Profile
批注对每个Configuration
进行注释会更有意义,而不是对每个bean都进行注释,并且稍后添加新类时可能会遗忘某些变体。
非常感谢。我只是删除了@ @ Service'注释,现在它按照我认为应该的方式运行:) 我也会看看'@ Conditional'注释。 – user3105453