Spring之Environment

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章