日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Spring Boot 应用程序启动流程分析

發布時間:2025/5/22 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot 应用程序启动流程分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SpringBoot 有兩個關鍵元素:


@SpringBootApplication
SpringApplication 以及 run() 方法

?

SpringApplication 這個類應該算是 Spring Boot 框架的“創新”產物了,原始的 Spring 中并沒有這個類,SpringApplication 中封裝了一套 Spring 應用的啟動流程,然而這對用戶完全透明,因此我們上手 Spring Boot 時感覺很簡潔、輕量。

?

一般來說默認的 SpringApplication 執行流程已經可以滿足大部分需求,但是若用戶想干預這個過程,則可以通過 SpringApplication 在流程某些地方開啟擴展點來完成對流程的擴展,典型的擴展方案那就是使用 set 方法。

?

比如,把我們天天司空見慣的 Spring Boot 應用的啟動類來拆解一下寫出來就是這樣:

@SpringBootApplication public class CodeSheepApplication {public static void main( String[] args ) {//SpringApplication.run( CodeSheepApplication.class args ); SpringApplication app = new SpringApplication( CodeSheepApplication.class );app.setXXX( ... ); // 用戶自定的擴展在此 !!!app.run( args );} }

?

?

這樣一拆解后我們發現,我們也需要先構造 SpringApplication 類對象,然后調用該對象的 run() 方法。那么接下來就講講 SpringApplication 的構造過程 以及其 run() 方法的流程,搞清楚了這個,那么也就搞清楚了SpringBoot應用是如何運行起來的!

?

SpringApplication 實例的初始化
我們對照代碼來看:

?

?

四個關鍵的步驟已標注在圖中,分別解釋如下:

① 推斷應用的類型:創建的是 REACTIVE應用、SERVLET應用、NONE 三種中的某一種

?

?

② 使用 SpringFactoriesLoader查找并加載 classpath下 META-INF/spring.factories文件中所有可用的 ApplicationContextInitializer

?

?

③ 使用 SpringFactoriesLoader查找并加載 classpath下 META-INF/spring.factories文件中的所有可用的 ApplicationListener

?

?

④ 推斷并設置 main方法的定義類

?

?

SpringApplication 的run()方法探秘
先看看代碼長啥樣子:

?

?

各個主要步驟我已經標注在上圖之中了,除此之外,我也按照自己的理解畫了一個流程圖如下所示,可以對照數字標示看一下:

?

?

我們將各步驟總結精煉如下:

?

1、通過 SpringFactoriesLoader 加載 META-INF/spring.factories 文件,獲取并創建 SpringApplicationRunListener 對象

?

2、然后由 SpringApplicationRunListener 來發出 starting 消息

?

3、創建參數,并配置當前 SpringBoot 應用將要使用的 Environment

?

4、完成之后,依然由 SpringApplicationRunListener 來發出 environmentPrepared 消息

?

5、創建 ApplicationContext

?

6、初始化 ApplicationContext,并設置 Environment,加載相關配置等

?

7、由 SpringApplicationRunListener 來發出 contextPrepared 消息,告知SpringBoot 應用使用的 ApplicationContext 已準備OK

?

8、將各種 beans 裝載入 ApplicationContext,繼續由 SpringApplicationRunListener 來發出 contextLoaded 消息,告知 SpringBoot 應用使用的 ApplicationContext 已裝填OK

?

9、refresh ApplicationContext,完成IoC容器可用的最后一步

?

10、由 SpringApplicationRunListener 來發出 started 消息

?

11、完成最終的程序的啟動

?

12、由 SpringApplicationRunListener 來發出 running 消息,告知程序已運行起來了

?

至此,全流程結束!

總結

以上是生活随笔為你收集整理的Spring Boot 应用程序启动流程分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。