1.啓動類裏面調用SpringApplication.run(xxx.class,args)方法 2.在SpringApplicaiton的run方法中有兩個步驟,首先建立SpringApplicaiton對象,而後再調用run方法。 3.在SpringApplicaiton構造器中調用initialize(sources)方法。 4.initialize方法中, a.將sources轉換成list加到this.sources屬性中 b.判斷是否爲web環境(在類路徑下是否能夠加載到Servlet和ConfigurableWebApplicationContext) c.加載Initializers(經過META-INF/spring.factories中鍵爲ApplicationContextInitializer的配置進行加載),dubug發現一共 加載了6個initializer(spring-boot-1.5.10.RELEASE.jar中4個,spring-boot-autoconfigure-1.5.10.RELEASE.jar中2個) d.加載ApplicationListener(也是經過META-INF/spring.factories),debug發現共加載了10個 e.經過尋找main方法找到啓動主類。 5.run方法中 a.StopWatch主要是監控啓動過程,統計啓動時間,檢測應用是否已經啓動或者中止。 b.加載SpringApplicationRunListener(也是經過META-INF/spring.factories),默認加載的是EventPublishingRunListener c.調用RunListener.starting()方法。 d.根據args建立應用參數解析器ApplicationArguments; e.準備環境變量:獲取環境變量environment,將應用參數放入到環境變量持有對象中,監聽器監聽環境變量對象的變化(listener.environmentPrepared) f.打印Banner信息(SpringBootBanner) g.建立SpringBoot的應用上下文(AnnotationConfigEmbeddedWebApplicationContext) h.prepareContext上下文以前的準備 i.refreshContext刷新上下文 j.afterRefresh(ApplicationRunner,CommandLineRunner接口實現類的啓動) k.返回上下文對象