Spring4.1原理解析1--资源和环境【PropertySource/PropertySources/Environment】

一、PropertySource的体系结构:

主要如下图

Spring4.1原理解析1--资源和环境【PropertySource/PropertySources/Environment】_第1张图片

PropertySource:属性源,是一个抽象类,用于保存一个name-source属性对 ,source可以是任意类型,具体类型需要子类实现。

实现一:

ComparisonPropertySource是PropertySource的一个内部类,用于临时保存属性对。CompositePropertySource提供了组合PropertySource的功能,查找顺序就是注册顺序


实现二(重点掌握):

EnumerablePropertySource:增加了获取source包含属性名数组的方法等。


ServletContextPropertySource:继承自EnumerablePropertySource,把name-source中的source使用Servlet上下文(ServletContext)初始化

#getPropertyNames() 

获取name-source中source属性名数组,也就是下面代码中所有<param-name>形成的String[]

<init-param>
 <param-name>param1</param-name>
 <param-value>value1</param-value>
</init-param>
...(若干个)


 MapPropertySource:继承自EnumerablePropertySource,把name-source中的source限定为  Map<String, Object> source

#getPropertyNames() 获取source(map)的所有key数组

#containsProperty(key) map中是否包含某个key


SystemEnvironmentPropertySource:source为System.getenv()---->【也就是系统的环境变量,在计算机右键--属性---高级系统设置---环境变量中那些】


PropertiesPropertySource:使用java.util.Properties初始化source,


ResourcePropertySource:使用org.springframework.core.io初始化source,并提供了多个构造方式-包括使用属性文件位置等

public class Test {
    public static void main(String[] args) throws IOException {
        ResourcePropertySource resourcePropertySource=new ResourcePropertySource("test","aaa.properties");
        String[] s=resourcePropertySource.getPropertyNames();
        System.out.println(Arrays.toString(s));
    }
}


ConfigurationPropertySources:暂时不讲


CommandLinePropertySource及两个子类:source来自于命令行


CompositePropertySource:可以保存多个source


ServletConfigPropertySource:用ServletConfig来初始化source


二、PropertySources

从名字可以看出其包含多个PropertySource:

Spring4.1原理解析1--资源和环境【PropertySource/PropertySources/Environment】_第2张图片

方法比较简单,这里不多解释


三 。PropertyResolver

Spring4.1原理解析1--资源和环境【PropertySource/PropertySources/Environment】_第3张图片

PropertyResolver:属性解析器,用来根据名字解析其值等,包含了一个定义了 获取属性替换文本占位符的方法

Environment:环境,比如JDK环境,Servlet环境,Spring环境等等;Spring抽象了一个Environment来表示环境配置
 除了可以解析相应的属性信息外,还提供了剖面相关的API,目的是: 可以根据剖面有选择的进行注册组件/配置。比如对于不同的环境注册不同的组件/配置(正式机、测试机、开发机等的数据源配置)。


StandardEnvironment:标准环境,普通Java应用时使用,会自动注册System.getProperties() 和 System.getenv()到环境;
StandardServletEnvironment:标准Servlet环境,其继承了StandardEnvironment,Web应用时使用,除了StandardEnvironment外,会自动注册ServletConfig(DispatcherServlet)、ServletContext及JNDI实例到环境;

public static void main(String[] args) throws IOException {
        StandardEnvironment standardEnvironment=new StandardEnvironment();
        ResourcePropertySource resourcePropertySource=new ResourcePropertySource("aaa.properties");
        standardEnvironment.getPropertySources().addLast(resourcePropertySource);
        
        String s="${a}dddddddddddddd${d}${c}";
        String b=standardEnvironment.resolvePlaceholders(s);
        System.out.println(b);

    }


你可能感兴趣的:(Spring4.1原理解析1--资源和环境【PropertySource/PropertySources/Environment】)