Spring Boot的啓動流程

1、 如果我們使用的是SpringApplication的靜態run方法,在SpringApplication執行初始化

    1.判斷webApplicationType類型  REACTIVE  SERVLET  NONE
    2.使用SpringFactoriesLoader在應用的classpath下的META-INF/spring.factories中加載所有ApplicationContextInitializer。
    3.使用SpringFactoriesLoader在應用的classpath下的META-INF/spring.factories中加載所有ApplicationListener。


2、 開始執行run方法首先遍歷執行所有通過SpringFactoriesLoader可以查找到並加載的SpringApplicationRunListener。調用它們的started()方法。

3、 創建並配置當前Spring Boot應用使用的prepareEnvironment

4、 遍歷調用所有SpringApplicationRunListener的environmentPrepared()的方法,其中加載application.yaml文件就在這裏。

5、 打印banner。

6、 根據實際環境創建的ApplicationContext。

7、 創建異常報告exceptionReporters

8、 執行prepareContext方法,對容器做一些相關設置。

9、 核心prepareContext,此布爲@EnableAutoConfiguration自動化配置的關鍵,註冊的關鍵。
    
    1.準備此上下文以進行刷新 prepareRefresh();

	2.告訴子類刷新內部bean工廠。ConfigurableListableBeanFactory beanFactory = getFreshBeanFactory();

	3.準備在此上下文中使用的bean工廠。prepareBeanFactory(beanFactory);

	4.允許在上下文子類中對bean工廠進行後處理。postProcessBeanFactory(beanFactory);

	5.調用在上下文中註冊爲bean的工廠處理器。invokeBeanFactoryPostProcessors(beanFactory);

	6.註冊攔截Bean創建的Bean處理器。registerBeanPostProcessors(beanFactory);

	7.爲此上下文初始化消息源。initMessageSource();

	8.爲此上下文初始化事件多播器。initApplicationEventMulticaster();

	9.在特定上下文子類中初始化其他特殊bean。onRefresh();

	10.檢查偵聽器bean並註冊它們。registerListeners();

	11.實例化所有剩餘的(非延遲初始化)單例。finishBeanFactoryInitialization(beanFactory);

	12.最後一步:發佈相應的事件。finishRefresh()之後創建web服務器如:Tomcat;

10、 afterRefresh 查找當前ApplicationContext中是否註冊有,ApplicationRunner,CommandLineRunner,則遍歷執行它們。

11、 執行 listeners的started,running方法;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章