14-Spring Boot執行流程分析
阿新 • • 發佈:2019-02-10
- 判斷是否是web環境
- 載入所有calsspath下面的META-INF/spring.factories ApplicationContextInitializer
- 載入所有calsspath下面的META-INF/spring.factories ApplicationListener
- 推斷main方法所在的類
- 開始執行run方法
- 設定java.awt.headless系統變數
- 載入所有calsspath下面的META-INF/spring.factories SpringApplicationRunListeners
- 執行SpringApplicationRunListeners所有的starting方法
- 例項化ApplicationArguments物件
- 建立environment
- 配置environment,主要是把run方法的引數配置到environment裡面
- 執行所有SpringApplicationRunListeners的environmentPrepared方法
- 如果不是web環境,但是是web的environment,則把這個web的environment轉換成標準的environment
- 列印Banner
- 初始化applicationContext,如果是web環境,例項化AnnotationConfigServletWebServerApplicationContext,否則例項化AnnotationConfigApplicationContext
- 如果beanNameGenerator不為空,把beanNameGenerator注入到context裡面去
- 回撥所有的ApplicationContextInitializer方法
- 執行所有SpringApplicationRunListeners的contextPrepared方法
- 依次往spring容器中注入springApplicationArguments物件,springBootBanner物件
- 把所有的源載入到context裡面去
- 執行所有SpringApplicationRunListeners的contextLoaded方法
- 執行context的refreshContext方法,並且呼叫context的registerShutdownHook方法
- 回撥,獲取容器中所有的ApplicationRunner,CommandLineRunner介面,排序,依次呼叫