我是一名 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;
}
}
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";
}
}
开发配置.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
设置为dev
):
(...) UnsatisfiedDependencyException: (...) 嵌套异常是 org.springframework.beans.factory.NoUniqueBeanDefinitionException: 没有定义 [EnvironmentAwareBean] 类型的合格 bean:预期单个匹配 bean 但找到 3:prodBean、devBean、getDevBean
我的方法与推荐的配置相去甚远吗?Configuration
在我看来,使用注释对每个 bean进行@Profile
注释而不是对每个 bean 都进行注释会更有意义,并且在以后添加新类时可能会忘记一些变体。