Java程序员应该都知道,每个Spring Boot都有一个启动类,Spring Boot的启动就是执行的该类的main方法。如下图,main方法中就是执行SpringApplication.run方法。
先总结一下Spring Boot启动流程。
MTEA-INF/spring.factories
我们知道,使用Maven坐标导入开发所需的jar包后,同时一些默认配置也会生效。那么Spring Boot又是怎么为这些jar包配置默认值的呢? 答案就在Spring Boot的启动类上的注解@SpringBootApplication中。
@SpringBootApplication主要由三个注解构成: @SpringBootConfiguration
、 @EnableAutoConfiguration
、 @ComponentScan
@EnableAutoConfiguration
底层是由两个注解组成, @AutoConfigurationPackage
、 @Import(AutoConfigurationImportSelector.class)
@Import(AutoConfigurationImportSelector.class)
自动配置的奥妙就在这里啦,这个类导入了很多自动配置类,debug一下可以发现,其读取的是classpath下的 META-INF/spring.factories
下的自动配置类
自动配置类如下:
Spring Boot通过主启动类上的@SpringBootApplication中的@EnableAutoConfiguration读取了类路径下的 META-INF/spring.factories
下EnableAutoConfiguration的配置类,但是这些配置类使用了@ConditionalOnClass,需满足一定的条件才会激活配置,这些配置类写入了默认的配置。