Spring之Environment
Spring在運行時的環境有多個選擇,開發環境、測試環境、生產環境等。每個Environment中可以配置多個Property,這些Property可以自定義配置,配置信息可以注入Spring容器。
這種配置可以在xml中,也可以在javaConfig中。
我們用java配置類來測試。
使用Environment的Property向容器中的Bean的屬性注入值。
如將load.properties文件中的User.name注入容器。
load.properties
User.name=Mike
準備一個配置類,使用@PropertySource註解將屬性文件加載進配置中
此時在容器中已經可以使用屬性。
@Configuration
@PropertySource("load.properties")
public class AppConfig {
}
使用@Value("${User.name}")註解就可以拿到屬性值
@Value註解通過Spel的$符號拿到數據。
@Component
public class User {
@Value("${User.name}")
private String name;
......
}
此時通過容器獲取環境,就可以拿到屬性
@Test
public void test6(){
ApplicationContext context = new AnnotationConfigApplicationContext(com.config.AppConfig.class);
//此時user的name就是環境中的User.name
User 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 接口
接口中含有對屬性的獲取和存入方法。
public interface Environment extends PropertyResolver {
String[] getActiveProfiles();
String[] getDefaultProfiles();
/** @deprecated */
@Deprecated
boolean acceptsProfiles(String... var1);
boolean acceptsProfiles(Profiles var1);
}
Environment 繼承了PropertyResolver接口
該接口中提供了對單個屬性的操作。
public interface PropertyResolver {
boolean containsProperty(String var1);
@Nullable
String 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;
}