PropertySource - JiyangM/spring GitHub Wiki

propertySource内部维护一个key、value组合,也就是属性的键值。

  • EnumerablePropertySource

继承propertySource,内部增加了一个抽象方法,用于获取所有属性名称。

public abstract String[] getPropertyNames();
  • SystemEnvironmentPropertySource

继承自MapPropertySource。 系统环境属性源,此属性源在根据name获取对应的value时,与父类实现不太一样。它认为name不区分大小写,且name中包含的'.'点与'_'下划线是等效的,因此在获取value之前,都会对name进行一次处理。

  • CommandLinePropertySource

继承自EnumerablePropertySource。 以输入命令行参数作为属性源的对象。命令行参数就是main方法传入的String[]数组值,在命令行中输入的字符串默认会以空格为分隔符被拆分成String数组。如:

java -dkey=value Test.class --name1=value1 --name2=value2 abc "-dkey=value Test.class"代表虚拟机参数,而"--name1=value1 --name2=value2 abc"会以空格拆分传入main方法。

CommandLinePropertySource属性源内部分为选项参数和非选项参数,选项参数带有特定的前缀(一般为"--"),非选项参数则相反。命令行参数语法一般由解析器定义,如:

SimpleCommandLineArgsParser定义:选项参数的前缀为"--"。当然,我们也可以自定义解析器。

注意:CommandLinePropertySource属性源本身只负责属性的存取,是不负责对命令行参数的解析的。

  • SimpleCommandLinePropertySource

继承自CommandLinePropertySource。 简单命令行属性源,使用SimpleCommandLineArgsParser解析器对象解析输入的String数组,把返回的CommandLineArgs对象作为属性的来源。