一、SpringBoot引导类注解@SpringBootApplication
SpringBoot项目都会在引导类上添加一个注解@SpringBootApplication。这个注解包含了如下三个注解:
- @SpringBootConfiguration: 该注解与@Configuration注解作用相同,用来声明当前是一个配置类。
- @ComponentScan: 组件扫描,默认扫描当前引导类所在的包及其子包。
- @EnableAutoConfiguration: SpringBoot实现自动化配置的核心注解。
二、自动化配置@EnableAutoConfiguration
2.1 Spring 2.7之前版本的自动配置过程
- @EnableAutoConfiguration是实现自动化配置的核心注解,该注解通过
@Import注解导入对应的配置选择器。内部就是读取了该项目和该项目引用的jar包下的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。 - 条件判断会有像@ConditionalOnClass、@ConditionalOnMissingBean这样的注解,判断是否有对应的class文件、判断是否没有对应的class文件,如果满足条件,则加载该类,把这个配置类的所有的Bean放入Spring容器中使用。
2.2 Spring 2.7之后版本的自动配置过程
- 与SpringBoot2.7之前的版本相比,2.7之后的版本读取了该项目和该项目引用的jar包下的classpath路径下
META-INF/spring/org.springframework.boot.autoconfiguraion.Autoconfiguration.imports文件中的所配置的类的全类名。