一、Environment
用來表示整個應用運行時的環境,爲了更形象地理解Environment,你可以把Spring應用的運行時簡單地想象成兩個部分:一個是Spring應用本身,一個是Spring應用所處的環境。
Environment在容器中是一個抽象的集合,是指應用環境的2個方面:profiles和properties。
1. Profile
profile配置是一個被命名的、bean定義的邏輯組,這些bean只有在給定的profile配置激活時纔會註冊到容器。不管是XML還是註解,Beans都有可能指派給profile配置。Environment環境對象的作用,對於profiles配置來說,它能決定當前激活的是哪個profile配置,和哪個profile是默認。
- 一個profile就是一組Bean定義的邏輯分組。
- 這個分組,也就 這個profile,被賦予一個命名,就是這個profile名字。
- 只有當一個profile處於active狀態時,它對應的邏輯上組織在一起的這些Bean定義纔會被註冊到容器中。
- Bean添加到profile可以通過XML定義方式或才annotation註解方式。
- Environment對於profile所扮演的角色是用來指定哪些profile是當前活躍的缺省。
2. Properties
properties屬性可能來源於properties文件、JVM properties、system環境變量、JNDI、servlet context parameters上下文參數、專門的properties對象,Maps等等。Environment對象的作用,對於properties來說,是提供給用戶方便的服務接口、方便撰寫配置、方便解析配置。
- 配置屬性源。
- 從屬性源中獲取屬性。
容器(ApplicationContext)所管理的bean如果想直接使用Environment對象訪問profile狀態或者獲取屬性,可以有兩種方式
(1)實現EnvironmentAware接口。
(2)@Inject或者@Autowired一個Environment對象。
絕大數情況下,bean都不需要直接訪問Environment對象,而是通過類似@Value註解的方式把屬性值注入進來。
二、具體使用
1.可以通過 @Autowired織入Environment
@Autowired
private Environment environment;
2.可以通過實現 implements EnvironmentAware 然後實現接口中的方法
@Setter
private Environment environment;
3.常用功能
獲取屬性配製文件中的值
environment.getProperty("rabbitmq.address")
獲取是否使用profile的
public boolean isDev(){
boolean devFlag = environment.acceptsProfiles("dev");
return devFlag;
}