我是一名春季新手,並試圖從簡單的'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