spring 的@Profile 的使用案例,和测试案例:
通过设置Enbironment 的ActiveProfiles 来设定当前的context需要使用的配置环境,,开发中使用@Profile注解在类,或方法上,来达到根据不同需求实例化不同的bean
结合测试 案例如下:
1 先导入spring-test 和junit 的jar 包
2 业务对应的类:只是用来装载结果,来验证不同的条件会实例化不同的bean
public classTestBean {
privateString content;
publicTestBean(String content) {
this.content= content;
}
publicString getContent() {
returncontent;
}
public voidsetContent(String content) {
this.content= content;
}
@Override
publicString toString() {
return"TestBean{" +
"content='"+ content +'\''+
'}';
}
}
3 编写配置类,在配置类中注册不同的bean,
@Configuration // 声明当前是一个配置类
public classTestConfig {
@Bean // 声明为bean
@Profile("good") //设置profile的条件
publicTestBean goodTestBean(){
return newTestBean("good上下文");
}
@Bean
@Profile("bad")//设置profile的条件
publicTestBean badTestBean(){
return newTestBean("bad上下文");
}
}
4 编写测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
@ActiveProfiles("good")
public classMyTest {
@Autowired
privateTestBeantestBean;
@Test
public voidprodBeanShouldInject(){
String string ="good上下文";
String result2=testBean.getContent();
System.out.print("字符串的比对结果是"+string.equals(result2)+";因为实例化的bean的content内容是"+result2);
}
}
控制台运行结果:
字符串的比对结果是true因为实例化的bean的content内容是good上下文
Process finished with exit code 0
如果将@Profile(“bad”)
控制台运行结果如下:
字符串的比对结果是false;因为实例化的bean的content内容是bad上下文
Process finished with exit code 0