1.建立SpringApplication實例web
1) 在SpringApplicaiton構造器中調用initialize(sources)方法。initialize方法中,將sources轉換成list加到this.sources屬性中。spring
2) 判斷是否爲web環境,在類路徑下是否能夠加載到Servlet和ConfigurableWebApplicationContextthis
3) 設置初始化器,從META-INF/spring.factories處讀取配置文件中Key爲:org.springframework.context.ApplicationContextInitializer的value,進行實例化操做 對象
4) 設置監聽器,StopWatch主要是監控啓動過程,統計啓動時間,檢測應用是否已經啓動或者中止。接口
5) 推斷應用入口類,經過尋找main方法找到啓動主類。it
2.執行SpringApplication.run()io
1) 獲取SpringApplicationRunListeners,(也是經過META-INF/spring.factories),默認加載的是EventPublishingRunListener。啓動監聽,調用RunListener.starting()方法。監控
2) 根據SpringApplicationRunListeners以及參數來準備環境,獲取環境變量environment,將應用參數放入到環境變量持有對象中,監聽器監聽環境變量對象的變化(listener.environmentPrepared),打印Banner信息(SpringBootBanner)變量
3) 建立ApplicationContext(spring上下文AnnotationConfigEmbeddedWebApplicationContext)配置
4) 建立FailureAnalyzer, 用於觸發從spring.factories加載的FailureAnalyzer和FailureAnalysisReporter實例
5) spring上下文前置處理prepareContext
6) spring上下文刷新refreshContext
7) spring上下文後置處理afterRefresh(ApplicationRunner,CommandLineRunner接口實現類的啓動),返回上下文對象