2啟動過程原始碼

2021-09-24 23:50:08 字數 2335 閱讀 9680

目錄

2run()

2.1獲取run方法的***eventpublishingrunlistener

2.2準備環境:prepareenvironment()

2.4獲取springbootexceptionreporter

2.5準備容器preparecontext()

2.6refresh

this.resourceloader = resourceloader;

assert.notnull(primarysources, "primarysources must not be null");

this.primarysources = new linkedhashset<>(arrays.aslist(primarysources));

//判斷web環境:none、servlet、reactive

//從spring.factories載入initializer

setinitializers((collection) getspringfactoriesinstances(

//從spring.factories載入***

//獲取主類 }

stopwatch stopwatch = new stopwatch();

stopwatch.start();

collectionexceptionreporters = new arraylist<>();

configureheadlessproperty();

/第一步:獲取run方法的***eventpublishingrunlistener,負責發布run方法中的事件

/發布starting事件

listeners.starting();

try

listeners.started(context);

} catch (throwable ex)

try

catch (throwable ex)

return context;

}void starting();

void environmentprepared(configurableenvironment environment);

}if (contextclass == null)

}catch (classnotfoundexception ex)

} }從spring.factories獲取,用來支援報告關於啟動的錯誤

該類主要是在專案啟動失敗之後,列印log

這一步主要是在refresh()之前的準備動作。包含乙個非常關鍵的操作:將啟動類注入容器,為後續開啟自動化配置奠定基礎。

//設定容器環境,包括各種變數

context.setenvironment(environment);

//執行容器後置處理

//傳送容器已經準備好的事件,通知各***

listeners.contextprepared(context);

//列印log

if (this.logstartupinfo)

// add boot specific singleton beans

//註冊啟動引數bean,這裡將容器指定的引數封裝成bean,注入容器

//設定banner

if (printedbanner != null)

// load the sources

//獲取我們的啟動類指定的引數,可以是多個

setsources = getallsources();

assert.notempty(sources, "sources must not be empty");

//載入我們的啟動類,將啟動類注入容器

load(context, sources.toarray(new object[0]));

//發布容器已載入事件。

listeners.contextloaded(context); }

舉例:context.addbeanfactorypostprocessor( new configurationwarningspostprocessor(getchecks()));

load(context, sources.toarray(new object[0])):

這裡會將我們的啟動類載入到spring容器beandefinitionmap中,為後續springboot 自動化配置奠定基礎,springboot為我們提供的各種註解配置也與此有關。

參考:

springboot2 | springboot啟動流程原始碼分析

tomcat原始碼學習2 啟動過程

這一次將會對tomcat的啟動過程進行乙個分析。tomcat的入口函式是 org.apache.catalina.startup.main 在這個函式中最關鍵的 段是 public static void main string args if command.equals startd else ...

SpringMVC之原始碼分析 啟動過程

類的繼承關係 spring mvc前端控制器dispatcherservlet frameworkservlet httpservletbean httpservlet httpservlet是servlet規範中的核心類,實現servlet介面,繼承此類用於處理使用者請求。httpservletb...

u boot 原始碼分析 1 啟動過程分析

kbuild 啟動過程 第二階段 總結參考 對於uboot,我一直是雲裡霧裡的乙個狀態,這部分讓我感到自己很菜,不用縱向深入地掌握uboot整個細節,但是相對它有乙個整體流程上的把握,包括uboot的啟動啟動過程,在整個啟動過程中會涉及到哪些檔案,以此的呼叫過程是什麼?抱著這幾個問題,大量蒐集資料,...