Spring Boot 啟動生命周期詳解
1. 啟動階段劃分
Spring Boot 啟動過程分為 4個核心階段,每個階段涉及不同的核心類和執行邏輯:
階段 1:預初始化(Pre-initialization)
- 目標:準備啟動器和環境配置
- 關鍵類:
- SpringApplication:啟動器核心類,負責協調整個啟動流程
- SpringApplicationBuilder:構建啟動器的輔助類(可選)
- Environment:存儲配置屬性(如
application.properties
)
- 執行流程:
- 通過
SpringApplication.run()
方法啟動應用 - 初始化
SpringApplication
對象,設置參數(如主類、環境變量) - 加載
Environment
的默認配置(如系統屬性、JVM參數)
- 通過
階段 2:初始化(Initialization)
- 目標:創建
ApplicationContext
并加載核心配置 - 關鍵類:
- ApplicationContext:Spring 容器(如
AnnotationConfigServletWebServerApplicationContext
) - SpringApplicationRunListener:監聽啟動事件(如
ServletWebServerApplicationContext
) - ApplicationContextInitializer:初始化容器(如
ConfigFileApplicationListener
)
- ApplicationContext:Spring 容器(如
- 執行流程:
- 創建
ApplicationContext
實例(Web項目通常為WebApplicationContext
) - 通過
ApplicationContextInitializer
初始化容器(如加載@PropertySource
) - 調用
SpringApplicationRunListener
的starting()
方法通知啟動
- 創建
階段 3:刷新(Refresh)
- 目標:加載 Bean 定義并完成容器初始化
- 關鍵類:
- ConfigurableApplicationContext:支持刷新的容器接口
- BeanFactory:Bean 定義的注冊表
- BeanDefinitionReader:讀取 Bean 配置(如 XML 或注解)
- BeanFactoryPostProcessor:修改 Bean 定義(如
PropertySourcesBeanFactoryPostProcessor
) - BeanPostProcessor:修改 Bean 實例(如
AutowiredAnnotationBeanPostProcessor
)
- 執行流程:
- 加載 Bean 定義:通過組件掃描(
@ComponentScan
)或 XML 配置 - BeanFactory 后處理:
BeanFactoryPostProcessor
修改 Bean 定義(如屬性源) - 實例化 Bean:創建 Bean 實例(但不注入依賴)
- Bean 后處理:
BeanPostProcessor
處理 Bean 實例(如依賴注入) - 注冊 Bean:將 Bean 注冊到容器中
- 加載 Bean 定義:通過組件掃描(
階段 4:運行(Run)
- 目標:啟動嵌入式服務器并完成應用就緒
- 關鍵類:
- EmbeddedWebApplicationContext:嵌入式 Web 容器(如 Tomcat、Jetty)
- ApplicationRunner:自定義啟動后邏輯(
@Order
可控制順序) - CommandLineRunner:命令行參數處理(與
ApplicationRunner
類似)
- 執行流程:
- 啟動嵌入式 Web 服務器(如 Tomcat)
- 執行
ApplicationRunner
和CommandLineRunner
(按順序) - 輸出啟動完成日志(如
Started Application in ... seconds
)
表格總結:Spring Boot 啟動階段與核心類
階段 | 關鍵類 | 作用 |
---|---|---|
預初始化 | SpringApplication , Environment | 初始化啟動器,加載基礎環境配置 |
初始化 | ApplicationContext , SpringApplicationRunListener , ApplicationContextInitializer | 創建容器,初始化配置,監聽啟動事件 |
刷新 | ConfigurableApplicationContext , BeanFactory , BeanFactoryPostProcessor , BeanPostProcessor | 加載 Bean 定義,處理 Bean 定義和實例化,完成依賴注入 |
運行 | EmbeddedWebApplicationContext , ApplicationRunner , CommandLineRunner | 啟動嵌入式服務器,執行自定義啟動后邏輯 |
關鍵類說明
SpringApplication
- 核心啟動器,協調整個生命周期,支持多種應用類型(如 Web、CLI)。
ApplicationContext
- Spring 容器,管理 Bean 的生命周期和依賴注入。
BeanFactoryPostProcessor
- 在 Bean 實例化前修改 Bean 定義(如
PropertySourcesBeanFactoryPostProcessor
)。
- 在 Bean 實例化前修改 Bean 定義(如
BeanPostProcessor
- 在 Bean 實例化后、依賴注入前修改 Bean 實例(如
AutowiredAnnotationBeanPostProcessor
)。
- 在 Bean 實例化后、依賴注入前修改 Bean 實例(如
EmbeddedWebApplicationContext
- Web 應用的容器,集成嵌入式服務器(如 Tomcat)。
執行順序總結
plaintext
SpringApplication.run() →
預初始化 → 初始化 → 刷新 → 運行 → 應用啟動完成
通過以上流程,Spring Boot 實現了從啟動到服務就緒的完整生命周期管理。