stopwatch stopwatch = new stopwatch();
stopwatch.start();
collectionexceptionreporters = new arraylist<>();
// 配置無頭屬性, 設定該應用程式即使沒有檢測到顯示器也允許啟動
configureheadlessproperty();
// 開啟事件監聽,通知監聽者們(listener)執行相應操作
listeners.starting();
try
listeners.started(context);
}catch (throwable ex)
try
catch (throwable ex)
return context;
} // 建立和配置環境
configurableenvironment environment = getorcreateenvironment();
// 配置環境
// 將環境鏈結到configurationproperties屬性名下
configurationpropertysources.attach(environment);
// 發布環境準備事件
// 標準的servlet環境
return new standardservletenvironment();
case reactive:
// webflux環境
return new standardreactivewebenvironment();
default:
return new standardenvironment();}}
根據依賴關係例項化standardservletenvironment
需例項化父類。推斷出首先執行org.springframework.core.env.abstractenvironment#abstractenvironment
。
public abstractenvironment()
org.springframework.web.context.support.standardservletenvironment
重寫了customizepropertysources(mutablepropertysources)
方法。
@override
protected void customizepropertysources(mutablepropertysources propertysources)
super.customizepropertysources(propertysources);
}
@override
protected void customizepropertysources(mutablepropertysources propertysources)
執行完此處**,源集合中的name
為:
servletconfiginitparams,
servletcontextinitparams,
systemproperties,
systemenvironment
protected void configureenvironment(configurableenvironment environment, string args)
// 配置屬性源
configurepropertysources(environment, args);
// 配置profiles
configureprofiles(environment, args);
}
在此應用程式的環境中新增,刪除或重新排序propertysource。
protected void configurepropertysources(configurableenvironment environment, string args)
// 如果命令列引數存在,判斷名稱為commandlineargs的source存不存在,存在替換,不存在放入sources首,引數以命令列優先
if (this.addcommandlineproperties && args.length > 0)
else }}
配置檔案環境中哪些配置檔案處於活動狀態。在配置檔案處理過程中,可以通過spring.profiles.active
屬性啟用其他配置檔案。
protected void configureprofiles(configurableenvironment environment, string args)
private void configureignorebeaninfo(configurableenvironment environment)
}
將環境源鏈結到configurationproperties
屬性名下
public static void attach(environment environment)
if (attached == null)
}
參考: springboot原始碼學習(二) 發布啟動事件
void environmentprepared(configurableenvironment environment)
}
springboot原始碼略讀
springboot的精髓是自動依賴注入。那麼哪些能自動注入呢,開啟spring boot autoconfigure,jar下的spring.factories。可以看到一堆這樣的配置 auto configure org.springframework.boot.autoconfigure.en...
SpringBoot原始碼分析
public class 第乙個引數 resourceloader 資源載入器 第二個引數 primarysources 載入的主要資源類 suppresswarnings public resourceloader resourceloader,class primarysources deduc...
Spring Boot 原始碼分析
1 專案初始化過程 springboot啟動類 springboot的啟動很簡單,如下 public static void main string args this.resourceloader resourceloader initialize sources private void ini...