说明: 1. 表示当前应用程序正在其中运行的环境的接口。建模应用程序环境的两个关键方面:配置文件和属性。与属性访问相关的方法通过PropertyResolver父接口提供。
2. 配置文件是一个命名的、逻辑的bean定义组,只有在给定配置文件处于活动状态时才能向容器注册。可以将bean分配给无论是在XML中定义的还是通过注释定义的配置文件中;有关语法详细信息,请参见SpringBeans 3.1模式或@Profile注释。环境对象相对于配置文件的作用是确定哪些配置文件(如果有)当前处于活动状态,以及哪些配置文件在默认情况下应处于活动状态。
3. 属性在几乎所有应用程序中都起着重要作用,并且可能来源于各种来源:属性文件、JVM系统属性、系统环境变量、JNDI、servlet上下文参数、特殊属性对象、映射等。与属性相关的环境对象的作用是为用户提供一个方便的服务接口,用于配置属性源并从中解析属性。
4. ApplicationContext中管理的bean可以注册为EnvironmentAware或@Inject环境,以便直接查询配置文件状态或解析属性。
5. 然而,在大多数情况下,应用程序级bean不需要直接与环境交互,而是可能需要将${…}属性值替换为属性占位符配置器,如PropertySourcesPlaceholderConfigurer,它本身是环境感知的,从Spring 3.1开始,在使用<context:property-placeholder/>时默认注册。
6. 环境对象的配置必须通过ConfigurableEnvironment接口完成,该接口从所有AbstractApplicationContext子类的 getEnvironment() 方法返回。请参阅ConfigurableEnvironment的Javadoc以获取演示在应用程序上下文refresh()方法之前操作属性源的用法示例。
该接口定义了如下方法:
// 返回为此环境显式激活的配置文件集。配置文件用于创建有条件注册的bean定义的逻辑分组,例如基于部署环境。可以通过将“spring.profiles.active”设置为系统属性或调用ConfigurableEnvironment.setActiveProfiles(String…)来激活配置文件。如果未明确指定任何配置文件为活动配置文件,则将自动激活任何默认配置文件。
String[] getActiveProfiles();
// 当未显式设置活动配置文件时,返回默认激活的配置文件集。
String[] getDefaultProfiles();
// 返回一个或多个给定配置文件是否处于活动状态,或者如果没有明确的活动配置文件,则返回一个或者多个给定的配置文件是否包含在默认配置文件集中。如果配置文件以“!”开头逻辑被反转,即如果给定配置文件不活动,该方法将返回true。例如,如果配置文件“p1”处于活动状态或“p2”处于非活动状态, env.acceptsProfiles("p1", "!p2") 将返回true。
注意: 该方法从5.1版本开始过时,交付给acceptsProfiles(Profiles)方法。
@Deprecated
boolean acceptsProfiles(String... profiles);
// 返回一个或多个给定配置文件是否处于活动状态
boolean acceptsProfiles(Profiles profiles);