一、前言
通过前面的一些介绍,我们从源码层面了解了spring boot 配置文件加载的类,但是前面的那篇的类中用到了很多的Environment,所以我觉得有必要去解析一下Environment,下面我们从StandardEnvironment入手,看以下Environment是做什么用的。
二、类图
首先我们通过Idea自带的类图生成工具,生成一下StandardEnvironment的类图。
我们可以通过类图清晰的明白StandardEnvironment的类的层次结构。
三、源码解析
package org.springframework.core.env;
//他是一个Environment的一个实现,适用于非WEB的应用
//除了ConfigurableEnvironment通用的属性解析和profile相关的操作外,StandardEnvironment还提供了
//system properties 和 system environment variables 两个属性
public class StandardEnvironment extends AbstractEnvironment {
/** System environment property source name: {@value} */
public static final String SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME = "systemEnvironment";
/** JVM system properties property source name: {@value} */
public static final String SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME = "systemProperties";
//自定义属性源 添加属性到propertySources
//systemProperties" 优先于 "systemEnvironment".
@Override
protected void customizePropertySources(MutablePropertySources propertySources) {
propertySources.addLast(new MapPropertySource(SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, getSystemProperties()));
propertySources.addLast(new SystemEnvironmentPropertySource(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, getSystemEnvironment()));
}
}
其中MapPropertySource与SystemEnvironmentPropertySource的相关类图如下。