Spring之Environment
Spring在运行时的环境有多个选择,开发环境、测试环境、生产环境等。每个Environment中可以配置多个Property,这些Property可以自定义配置,配置信息可以注入Spring容器。
这种配置可以在xml中,也可以在javaConfig中。
我们用java配置类来测试。
使用Environment的Property向容器中的Bean的属性注入值。
如将load.properties文件中的User.name注入容器。
123load.propertiesUser.name=Mike
准备一个配置类,使用@PropertySource注解将属性文件加载进配置中
此时在容器中已经可以使用属性。
123456@Configuration@PropertySource("load.properties")public class AppConfig {}
使用@Value(“${User.name}”)注解就可以拿到属性值
@Value注解通过Spel的$符号拿到数据。
12345678@Componentpublic class User {@Value("${User.name}")private String name;......}
此时通过容器获取环境,就可以拿到属性
12345678910111213141516@Testpublic void test6(){ApplicationContext context = new AnnotationConfigApplicationContext(com.config.AppConfig.class);//此时user的name就是环境中的User.nameUser user = context.getBean("user",User.class);System.out.println("bean:"+ user);//获取环境Environment environment = context.getEnvironment();//通过属性名获取值String property = environment.getProperty("User.name");System.out.println(" 属性:"+property);}
Environment 接口
接口中含有对属性的获取和存入方法。
1234567891011public interface Environment extends PropertyResolver {String[] getActiveProfiles();String[] getDefaultProfiles();/** @deprecated */@Deprecatedboolean acceptsProfiles(String... var1);boolean acceptsProfiles(Profiles var1);}
Environment 继承了PropertyResolver接口
该接口中提供了对单个属性的操作。
复制代码12345678910111213141516171819202122public interface PropertyResolver {boolean containsProperty(String var1);@NullableString getProperty(String var1);String getProperty(String var1, String var2);@Nullable<T> T getProperty(String var1, Class<T> var2);<T> T getProperty(String var1, Class<T> var2, T var3);String getRequiredProperty(String var1) throws IllegalStateException;<T> T getRequiredProperty(String var1, Class<T> var2) throws IllegalStateException;String resolvePlaceholders(String var1);String resolveRequiredPlaceholders(String var1) throws IllegalArgumentException;}
