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方法;
Spring Boot的啓動流程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.