IT歡樂頌——程式設計總結、挖掘資源、分享投資、區塊鏈、炒房。用資料講IT圈的歡樂頌
阿新 • • 發佈:2019-02-02
Spring Boot執行流程分析
spring boot的啟動
- 例項化SpringApplication,然後呼叫run
SpringApplication app = new SpringApplication(App.class);ConfigurableApplicationContext context = app.run(args);
- 直接呼叫靜態的run方法(內部轉換成第一種呼叫方式)
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
- 判斷是否是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介面,排序,依次呼叫