1. 程式人生 > >【玩轉SpringBoot】SpringBoot應用的啟動過程一覽表

【玩轉SpringBoot】SpringBoot應用的啟動過程一覽表


SpringBoot應用的啟動方式很簡單,就一行程式碼,如下圖01:


其實這行程式碼背後主要執行兩個方法,一個是構造方法,一個是run方法。

構造方法主要內容就是收集一些資料,和確認一些資訊。如下圖02:


真正的執行要從run方法開始,為此,SpringBoot特意定義了一個監聽器,專門監聽這個run方法的執行過程。

這個監聽器的名字是,SpringApplicationRunListener,如下圖03:


這個介面的方法其實就表示了SpringBoot應用的啟動過程。

備註:這個監聽器是SpringBoot自己使用的,我們雖然也可以使用,但有些麻煩。

第一步,啟動

當進入run方法後,首先就是獲取監聽器,並觸發starting方法。


應用正式開始啟動,如下圖04:


第二步,準備環境

最先要準備好的就是Environment,因為後續要使用它。

它裡面的值也包含啟動時的命令列引數,如下圖05:


此時會觸發監聽器的environmentPrepared方法,如下圖06:


第三步,建立容器

根據應用型別建立適合的Spring容器,如下圖07:


第四步,準備容器

主要包括把Environment設定給容器,執行容器的自定義初始化器。

同時觸發監聽器的contextPrepared方法,如下圖08:


第五步,載入資源

這裡的資源主要包括應用的主類,還有使用者顯式設定的類名/包名/XML檔案等。

載入這些資源的目的就是為了註冊bean定義。


然後再觸發監聽器的contextLoaded方法,如下圖09:


第六步,容器重新整理

容器重新整理主要包括呼叫“後處理器”進一步註冊bean定義。

還包括對所有(非延遲載入)單例bean的例項化和初始化。如下圖10:


此時,其實Spring容器已經啟動成功了。所以觸發了監聽器的started方法。

表明已經啟動了,如下圖11:


第七步,呼叫Runner介面

Runner介面就是容器啟動成功後馬上就會被執行的。它的實現類作為bean註冊到容器中。

所以是從容器中拿出這些bean再執行,如下圖12:


此時,啟動過程需要執行的所有東西都已完成。

因此,要觸發監聽器的running方法,表明已經進入正常執行狀態,如下圖13:



run方法也已經結束了,就把容器物件返回了,如下圖14:

 

(END)

 

>>> 玩轉SpringBoot系列文章 <<<

 

【玩轉SpringBoot】配置檔案yml的正確開啟姿勢

【玩轉SpringBoot】用好條件相關注解,開啟自動配置之門

【玩轉SpringBoot】給自動配置來個整體大揭祕

【玩轉SpringBoot】看似複雜的Environment其實很簡單

【玩轉SpringBoot】翻身做主人,一統web伺服器

【玩轉SpringBoot】讓錯誤處理重新由web伺服器接管

>>> 品Spring系列文章 <<<

 

品Spring:帝國的基石

品Spring:bean定義上梁山

品Spring:實現bean定義時採用的“先進生產力”

品Spring:註解終於“成功上位”

品Spring:能工巧匠們對註解的“加持”

品Spring:SpringBoot和Spring到底有沒有本質的不同?

品Spring:負責bean定義註冊的兩個“排頭兵”

品Spring:SpringBoot輕鬆取勝bean定義註冊的“第一階段”

品Spring:SpringBoot發起bean定義註冊的“二次攻堅戰”

品Spring:註解之王@Configuration和它的一眾“小弟們”

品Spring:bean工廠後處理器的呼叫規則

品Spring:詳細解說bean後處理器

品Spring:對@PostConstruct和@PreDestroy註解的處理方法

品Spring:對@Resource註解的處理方法

品Spring:對@Autowired和@Value註解的處理方法

品Spring:真沒想到,三十步才能完成一個bean例項的建立

品Spring:關於@Scheduled定時任務的思考與探索,結果尷尬了

 

>>> 熱門文章集錦 <<<

 

畢業10年,我有話說

【面試】我是如何面試別人List相關知識的,深度有點長文

我是如何在畢業不久只用1年就升為開發組長的

爸爸又給Spring MVC生了個弟弟叫Spring WebFlux

【面試】我是如何在面試別人Spring事務時“套路”對方的

【面試】Spring事務面試考點吐血整理(建議珍藏)

【面試】我是如何在面試別人Redis相關知識時“軟懟”他的

【面試】吃透了這些Redis知識點,面試官一定覺得你很NB(乾貨 | 建議珍藏)

【面試】如果你這樣回答“什麼是執行緒安全”,面試官都會對你刮目相看(建議珍藏)

【面試】迄今為止把同步/非同步/阻塞/非阻塞/BIO/NIO/AIO講的這麼清楚的好文章(快快珍藏)

【面試】一篇文章幫你徹底搞清楚“I/O多路複用”和“非同步I/O”的前世今生(深度好文,建議珍藏)

【面試】如果把執行緒當作一個人來對待,所有問題都瞬間明白了

Java多執行緒通關———基礎知識挑戰

品Spring:帝國的基石

 

作者是工作超過10年的碼農,現在任架構師。喜歡研究技術,崇尚簡單快樂。追求以通俗易懂的語言解說技術,希望所有的讀者都能看懂並記住。下面是公眾號的二維碼,歡迎關注!

 &nb