Spring3.2 运行时环境
可以看到Environment定义了有关获取profile的方法,并且继承了PropertyResolver接口,该接口定义了从具体的属性源中解析属性的功能:
public interface PropertyResolver { /** * 检查是否有某属性 */ boolean containsProperty(String key); /** * 获取某属性 */ String getProperty(String key); /** * 获取某属性,不存在则返回defaultValue */ String getProperty(String key, String defaultValue); /** * 获取某属性,其值类型为T */ <T> T getProperty(String key, Class<T> targetType); /** * 获取某属性,其值类型为T,不存在则返回defaultValue */ <T> T getProperty(String key, Class<T> targetType, T defaultValue); /** * 获取某属性,并转换为对应的Class对象,失败会抛ConversionException */ <T> Class<T> getPropertyAsClass(String key, Class<T> targetType); /** * 获取某属性,不存在抛出IllegalStateException */ String getRequiredProperty(String key) throws IllegalStateException; /** * 获取某属性,其值类型为T,不存在抛出IllegalStateException */ <T> T getRequiredProperty(String key, Class<T> targetType) throws IllegalStateException; /** * 解析占位符${...} */ String resolvePlaceholders(String text); /** * 解析占位符${...},不存在抛出IllegalArgumentException */ String resolveRequiredPlaceholders(String text) throws IllegalArgumentException;} 可见Spring环境主要由两个组件组成:配置(profile)和属性(property)。profile只是一个名称字符串,可对Bean容器中的Bean进行逻辑分组,即在定义Bean时,可以指定该Bean归入到某些profile中。Property则是大多应用所常见的,Spring中这些属性可以来自properties文件,JVM系统属性,系统环境变量,JNDI,Servlet上下文参数,Properties对象等。