1、前言java
經過前面的一些介紹,咱們從源碼層面瞭解了spring boot 配置文件加載的類,可是前面的那篇的類中用到了不少的Environment,因此我以爲有必要去解析一下Environment,下面咱們從StandardEnvironment入手,看如下Environment是作什麼用的。spring
2、類圖ide
首先咱們經過Idea自帶的類圖生成工具,生成一下StandardEnvironment的類圖。工具
咱們能夠經過類圖清晰的明白StandardEnvironment的類的層次結構。code
3、源碼解析get
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的相關類圖以下。源碼