Spring之Environment

Spring在运行时的环境有多个选择,开发环境、测试环境、生产环境等。每个Environment中可以配置多个Property,这些Property可以自定义配置,配置信息可以注入Spring容器。

这种配置可以在xml中,也可以在javaConfig中。

我们用java配置类来测试。

使用Environment的Property向容器中的Bean的属性注入值。

如将load.properties文件中的User.name注入容器。

  1. 123load.properties
  2. User.name=Mike

准备一个配置类,使用@PropertySource注解将属性文件加载进配置中

此时在容器中已经可以使用属性。

  1. 123456@Configuration
  2. @PropertySource("load.properties")
  3. public class AppConfig {
  4. }

使用@Value(“${User.name}”)注解就可以拿到属性值

@Value注解通过Spel的$符号拿到数据。

  1. 12345678@Component
  2. public class User {
  3. @Value("${User.name}")
  4. private String name;
  5. ......
  6. }

此时通过容器获取环境,就可以拿到属性

  1. 12345678910111213141516@Test
  2. public void test6(){
  3. ApplicationContext context = new AnnotationConfigApplicationContext(com.config.AppConfig.class);
  4. //此时user的name就是环境中的User.name
  5. User user = context.getBean("user",User.class);
  6. System.out.println("bean:"+ user);
  7. //获取环境
  8. Environment environment = context.getEnvironment();
  9. //通过属性名获取值
  10. String property = environment.getProperty("User.name");
  11. System.out.println(" 属性:"+property);
  12. }

Environment 接口

接口中含有对属性的获取和存入方法。

  1. 1234567891011public interface Environment extends PropertyResolver {
  2. String[] getActiveProfiles();
  3. String[] getDefaultProfiles();
  4. /** @deprecated */
  5. @Deprecated
  6. boolean acceptsProfiles(String... var1);
  7. boolean acceptsProfiles(Profiles var1);
  8. }

Environment 继承了PropertyResolver接口

该接口中提供了对单个属性的操作。

  1. 复制代码12345678910111213141516171819202122public interface PropertyResolver {
  2. boolean containsProperty(String var1);
  3. @Nullable
  4. String getProperty(String var1);
  5. String getProperty(String var1, String var2);
  6. @Nullable
  7. <T> T getProperty(String var1, Class<T> var2);
  8. <T> T getProperty(String var1, Class<T> var2, T var3);
  9. String getRequiredProperty(String var1) throws IllegalStateException;
  10. <T> T getRequiredProperty(String var1, Class<T> var2) throws IllegalStateException;
  11. String resolvePlaceholders(String var1);
  12. String resolveRequiredPlaceholders(String var1) throws IllegalArgumentException;
  13. }