1. 程式人生 > 程式設計 >Spring Boot啟動流程和自動配置原理

Spring Boot啟動流程和自動配置原理

Java程式設計師應該都知道,每個Spring Boot都有一個啟動類,Spring Boot的啟動就是執行的該類的main方法。如下圖,main方法中就是執行SpringApplication.run方法。

20191122202613.png

啟動流程

先總結一下Spring Boot啟動流程。

  • SpringApplication.run中執行了兩步操作,先封裝了一個SpringApplication的例項,再執行該例項的過載run方法
  • SpringApplication封裝例項時,讀取了classpath下所有的MTEA-INF/spring.factories xml配置檔案的ApplicationContextInitializer(容器初始化器)還有ApplicaiontListener(偵聽器),將這兩者封裝到SpringApplication例項中
  • 執行SpringApplication例項的run方法
  • run方法中預設初始化了Annotation配置的容器AnnotationConfigApplicationContext
  • 執行上面ApplicationContextInitializer的initial方法
  • 然後載入Bean到容器中

Spring Boot自動化配置

我們知道,使用Maven座標匯入開發所需的jar包後,同時一些預設配置也會生效。那麼Spring Boot又是怎麼為這些jar包配置預設值的呢? 答案就在Spring Boot的啟動類上的註解@SpringBootApplication中。

Spring Boot啟動類

@SpringBootApplication主要由三個註解構成:@SpringBootConfiguration

@EnableAutoConfiguration@ComponentScan

@SpringBootApplication

@EnableAutoConfiguration底層是由兩個註解組成,@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)

@EnableAutoConfiguration

@Import(AutoConfigurationImportSelector.class) 自動配置的奧妙就在這裡啦,這個類匯入了很多自動配置類,debug一下可以發現,其讀取的是classpath下的META-INF/spring.factories下的自動配置類

自動配置類

自動配置類如下:

自動配置類

總結

Spring Boot通過主啟動類上的@SpringBootApplication中的@EnableAutoConfiguration讀取了類路徑下的META-INF/spring.factories下EnableAutoConfiguration的配置類,但是這些配置類使用了@ConditionalOnClass,需滿足一定的條件才會啟用配置,這些配置類寫入了預設的配置。