Environment Abstraction,环境形象,指的是Spring通过Environment接口不便地从环境变量或配置文件中读取数据。

Spring容器的Environment接口蕴含两个重要概念或模块:profiles和properties。

profiles:有active或inactive两个状态,只有active状态的profiles指定的资源才会失效、或者才会被注入到Spring容器中。

properties指的是包含:

properties files, JVM system properties, system environment variables, JNDI, servlet context parameters, ad-hoc Properties objects, Map objects, and so on

等在内的资源。

profiles和properties联合应用,能够实现:通过profiles指定在什么条件或环境下、哪一类或哪些资源文件或环境变量、参数会失效,或者哪些bean definition会被加载到Spring容器中。

比方,通过profiles别离指定开发环境、测试环境和生产环境的配置文件。

Bean Definition Profiles

通过@Profile注解实现不同环境下加载不同的Bean,例如:

@Configuration@Profile("development")public class StandaloneDataConfig {    @Bean    public DataSource dataSource() {        ...    }}

@Profile能够反对操作符:! & |,别离代表逻辑运算符not and or。

比方:@Profile({"p1", "!p2"}),示意p1激活、或者p2没有被激活的状况下失效。

@Profiles作用在@Configuration下示意这个配置文件下的所有bean都遵循其约定,作用在@Bean、或@Component上则示意以后bean遵循其约定。

激活Profile

Spring反对通过以下形式激活Profiles:

  1. 编程式:Environment的setActiveProfiles办法
  2. 配置spring.profiles.active参数:通过零碎环境变量、 JVM system properties、servlet context parameters...等

能够通过:@Profile("default")形式指定默认Profile,Spring没有检测到上述任何形式指定Profiles的状况下,缺省设置失效。

上一篇 Spring FrameWork从入门到NB - BeanPostProcessor