一、springboot運行流程
1、springboot獲取配置的流程
上圖是對springboot獲取配置流程的簡單總結。
- 運行主程序時,調用了@SpringBootApplication註解,這個註解又包含一個@Import註解,用於導入配置類。
- 這個@Import註解會去類路徑下所有的META-INF/spring.factories中去搜索以“AutoConfiguration”爲後綴的配置類;
- 對找到的每一個××AutoConfiguration配置類,根據其上的@EnableConfigurationProperties註解讀取對於的××Properties類;
- 將讀取到的××Properties中的屬性值綁定到組件中
- 取用戶配置文件,將配置的屬性值綁定到組件中
- 將組件在容器中註冊。
就這樣完成了配置值的獲取。
二、springboot啓動流程
上圖是對springboot啓動流程的簡單總結。
運行主配置類時,主要分爲兩大步驟:首先創建Springboot的Application對象,然後是運行run方法。
2.1創建Springboot的Application對象
創建的對象根據springboot獲取配置的流程,綁定了配置裏面的默認值。
主要實現的功能就是到META-INF/spring.factories目錄下去尋找兩類東西並保存起來。
- 一個是ApplicationContextInitializer,也就是容器的初始化器;
- 一個是ApplicationListener,也就是應用程序的監聽。
保存的東西供run方法運行時調用。
2.2運行run方法
(1)去META-INF/spring.factories目錄下去獲取監聽,注意獲取的是ApplicationRunListener而不是ApplicationListener。
(2)配置環境,然後調用上一步獲取的監聽的environmentPrepared方法表示環境準備完成
(3)創建ioc容器
(4)應用初始化器
- 將配置好的環境在ioc容器中佈置;
- 讀取創建Springboot的Application對象是保存的兩類東西的方法,一個是初始化器,一個是contextPrepared方法,也就是告訴系統容器準備就緒。
(5)在ioc中註冊命令行參數對象
(6)調用(1)獲取的ApplicationRunListener中的contextLoaded方法表示上下文環境準備完成
(7)刷新容器:也就是獲取、創建和加載所有的組件、配置類和自動配置類。
(8)從容器中獲取ApplicationRunner和CommandLineRunner,並調用其中的run方法;
(9)調用(1)獲取的ApplicationRunListener中的finished方法表示容器創建完成
(10)返回配置好的ioc容器
文章來源:springboot運行流程和實際應用