我是一名Spring新手,试图从Spring的简单“配置文件”处理优势中获益。我已经完成了本教程:
https://spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile
现在我想把这个概念改成一个简单的例子。
我有两个配置文件:
dev
和
prod
.我想
@Configuration
类,其中我可以根据设置的配置文件实例化不同的bean(分别实现一个公共接口)。
我当前使用的类如下所示:
状态控制器.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;
}
}
环境感知Bean.java
public interface EnvironmentAwareBean {
String getString();
}
环境感知Bean.java
@Service
public class DevBean implements EnvironmentAwareBean {
@Override
public String getString() {
return "development";
}
}
环境感知Bean.java
@Service
public class ProdBean implements EnvironmentAwareBean {
@Override
public String getString() {
return "production";
}
}
开发配置.java
@Configuration
@Profile("dev")
public class DevConfig {
@Bean
public EnvironmentAwareBean getDevBean() {
return new DevBean();
}
}
产品配置.java
@Configuration
@Profile("prod")
public class ProdConfig {
@Bean
public EnvironmentAwareBean getProdBean() {
return new ProdBean();
}
}
运行该示例会在启动期间引发此异常(
SPRING_PROFILES_DEFAULT
设置为
开发
):
(…)UnsatisfiedDependencyException:(…)嵌套异常为org.springframework.beans.factory。NoUniqueBeanDefinitionException:未定义类型为[EnvironmentAwareBean]的限定bean:应为单个匹配bean,但找到3:prodBean、devBean、getDevBean
Configuration
使用
@Profile
注释,而不是对每个bean进行注释,并且在稍后添加新类时可能会忘记一些变体。