Spring注解驱动开发学习总结10:根据环境注册 @Profile注解
1、根据环境注册@Profile注解
@Profile注解可以指定组件在哪个环境下才能注入容器。
比如配置文件有开发环境、测试环境、生产环境,生产发布的时候必须要使用生产环境的配置。
1.1 加了环境标识的bean,只有这个环境被激活的时候才能注入容器。默认是default环境,也就是自动允许注入。
1.2 @Profile注解如果放到配置类上,只有指定的环境生效时,整个配置类的所有配置才会生效。
1.3 没有标注环境标识的bean,任何环境下都可以加载。
1.4 开启环境标识方法
1.4.1 使用命令行动态参数:在虚拟机参数位置加载:-Dspring.profiles.active=prd
1.4.2 使用代码的方法激活环境
1.1 构建Product类
构建Product类:com/example/bean/Product.java
给product类添加一个属性:质量quality。
package com.example.bean;
public class Product {
private String quality;
public Product(String quality) {
this.quality = quality;
}
public String getQuality() {
return quality;
}
public void setQuality(String quality) {
this.quality = quality;
}
@Override
public String toString() {
return "Product{" +
"quality='" + quality + '\'' +
'}';
}
}
1.2 构建配置类
构建配置类:com/example/config/MainConfigOfProfile.java
1)@Profile(“dev”):开发环境,产品质量为开发水平
2)@Profile(“test”):测试环境,产品质量为测试水平
2)@Profile(“prd”):生产环境,产品质量为生产水平
package com.example.config;
import com.example.bean.Product;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
public class MainConfigOfProfile {
@Profile("dev")
@Bean("product")
public Product productDev() {
return new Product("dev");
}
@Profile("test")
@Bean("product")
public Product productTest() {
return new Product("test");
}
@Profile("prd")
@Bean("product")
public Product productPrd() {
return new Product("prd");
}
}
1.3 测试一(动态参数开启生产环境)
新建测试方法:testProfile
@Test
public void testProfile() {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfProfile.class);
System.out.println("\nioc容器已创建完成\n");
Product bean = applicationContext.getBean(Product.class);
System.out.println(bean);
}
右键测试方法,选择Modify Run Configuration …,调整运行的动态参数
给Environment variables添加参数:spring.profiles.active=prd
配置好运行参数后,运行测试方法,得到下图。
可以看到,开启生产环境后,获取的bean的属性为prd
1.4 测试二(代码方式开启测试环境)
测试一中是使用虚拟机运行时的参数开启的生产环境,还可以通过代码方法自动设置ioc容器的环境,以下以开启测试环境举例。
新建测试方法:
@Test
public void testProfile2() {
// 构造无参ioc构造器
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
// 代码开启测试环境
applicationContext.getEnvironment().setActiveProfiles("test");
// 注册主配置类
applicationContext.register(MainConfigOfProfile.class);
applicationContext.refresh();
System.out.println("\nioc容器已创建完成\n");
Product bean = applicationContext.getBean(Product.class);
System.out.println(bean);
}
运行测试方法,得到下图。
可以看到此时得到的bean的属性就是test了。