Java程序員應(yīng)該都知道澄耍,每個Spring Boot都有一個啟動類噪珊,Spring Boot的啟動就是執(zhí)行的該類的main方法晌缘。如下圖齐莲,main方法中就是執(zhí)行SpringApplication.run方法。
啟動流程
先總結(jié)一下Spring Boot啟動流程磷箕。
- SpringApplication.run中執(zhí)行了兩步操作选酗,先封裝了一個SpringApplication的實例,再執(zhí)行該實例的重載run方法
- SpringApplication封裝實例時岳枷,讀取了classpath下所有的
MTEA-INF/spring.factories
xml配置文件的ApplicationContextInitializer(容器初始化器)還有ApplicaiontListener(偵聽器)芒填,將這兩者封裝到SpringApplication實例中 - 執(zhí)行SpringApplication實例的run方法
- run方法中默認(rèn)初始化了Annotation配置的容器AnnotationConfigApplicationContext
- 執(zhí)行上面ApplicationContextInitializer的initial方法
- 然后加載Bean到容器中
Spring Boot自動化配置
我們知道,使用Maven坐標(biāo)導(dǎo)入開發(fā)所需的jar包后空繁,同時一些默認(rèn)配置也會生效殿衰。那么Spring Boot又是怎么為這些jar包配置默認(rèn)值的呢? 答案就在Spring Boot的啟動類上的注解@SpringBootApplication中盛泡。
@SpringBootApplication主要由三個注解構(gòu)成:@SpringBootConfiguration
闷祥、@EnableAutoConfiguration
、@ComponentScan
@EnableAutoConfiguration
底層是由兩個注解組成傲诵,@AutoConfigurationPackage
凯砍、@Import(AutoConfigurationImportSelector.class)
@Import(AutoConfigurationImportSelector.class)
自動配置的奧妙就在這里啦箱硕,這個類導(dǎo)入了很多自動配置類,debug一下可以發(fā)現(xiàn)悟衩,其讀取的是classpath下的META-INF/spring.factories
下的自動配置類
自動配置類如下:
總結(jié)
Spring Boot通過主啟動類上的@SpringBootApplication中的@EnableAutoConfiguration讀取了類路徑下的META-INF/spring.factories
下EnableAutoConfiguration的配置類剧罩,但是這些配置類使用了@ConditionalOnClass,需滿足一定的條件才會激活配置座泳,這些配置類寫入了默認(rèn)的配置惠昔。