this.resourceloader = resourceloader;
assert.notnull(primarysources, "primarysources must not be null");
this.primarysources = new linkedhashset<>(arrays.aslist(primarysources));
//獲取容器型別 reactive servlet none 三種型別 一般web服務為 servlet 型別
setinitializers((collection) getspringfactoriesinstances(
}stopwatch stopwatch = new stopwatch();
stopwatch.start();
collectionexceptionreporters = new arraylist<>();
configureheadlessproperty();
listeners.starting();
try
listeners.started(context);
}catch (throwable ex)
try catch (throwable ex)
return context;
}
向spring容器註冊bean的呼叫棧
=>refreshcontext(context)
=>invokebeanfactorypostprocessors(beanfactory)
=>postprocessorregistrationdelegate.invokebeanfactorypostprocessors(beanfactory, getbeanfactorypostprocessors())
3: postprocessorregistrationdelegate.invokebeanfactorypostprocessors(beanfactory, getbeanfactorypostprocessors())
=>invokebeandefinitionregistrypostprocessors(currentregistryprocessors, registry);=>postprocessor.postprocessbeandefinitionregistry(registry);
4: configurationclasspostprocessor.postprocessbeandefinitionregistry=>processconfigbeandefinitions(registry)
=>parser.parse(candidates);
//掃瞄路徑的下的檔案 spring的註解的掃瞄 在此處完成並註冊到beanfactroy中
5: configurationclassparser.parse(setconfigcandidates)
=>parse(((annotatedbeandefinition) bd).getmetadata(), holder.getbeanname());=>processconfigurationclass(configurationclass configclass)
=>doprocessconfigurationclass(configclass, sourceclass)//
springboot啟動流程
本文以除錯乙個實際的springboot啟動程式為例,參考流程中主要類類圖,來分析其啟動邏輯和自動化配置原理。2.載入springboot配置環境 configurableenvironment 如果是通過web容器發布,會載入standardenvironment,其最終也是繼承了configur...
Spring Boot啟動流程
隨著我們ctrl加滑鼠左鍵的使用,最終我們會在乙個springboot專案中發現啟動過程由以下兩個過程組成 構造過程 public resourceloader resourceloader,class primarysources run方法 string.args context 這個也很重要,...
springboot啟動流程
1 判斷當前類是web的serverlet 2 載入所有的初始化器 3 載入所有的 4 設定程式執行的主類 2 執行run方法 1 建立計時器物件開始計時 2 設定handless的屬性並設定到系統屬性中 3 初始化 getrunlister 4 啟動準備好的 5 設定命令列引數 6 準備環境物件 ...