主要如下图
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
从名字可以看出其包含多个PropertySource:
方法比较简单,这里不多解释
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); }