@SpringBootApplication注解源码解析
@SpringBootApplication注解主要由4类注解组成,分别为:JDK原生注解(4个)、@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。
一、JDK原生注解4个
@Target(ElementType.TYPE) //当前注解的使用范围
@Retention(RetentionPolicy.RUNTIME) //生命周期
@Documented //声明在生成 doc 文档时是否带着注解
@Inherited //声明是否子类会显示父类的注解
二、@SpringBootConfiguration(重要)
点开查看该注解的源码,可以发现本质是@Configuration,说明该类是个配置类功能等同于xml配置文件,实现配置文件的功能。
三、@EnableAutoConfiguration(重要)
点开该注解的源码,可以发现本质是@Import,自动导入功能。借助该注解的帮助,将所有符合自动配置条件的 bean 定义加载到 IOC 容器中。@EnableAutoConfiguration会根据类路径中的 jar 依赖为项目进行自动配置。
★SpringBoot自动装配的原理:
SpringBoot 启动的时候,会调用 run 方法,run 方法会刷新容器,刷新容器的时候他会通过 @EnableAutoConfiguration 注解找到META-INF/spring.factories 文件中的所有自动配置类,我们会在启动的时候把这些配置类加载到容器里面,这些配置类里面有好多的条件注解,他会根据我们有没有引入相应的 jar 包,有没有注入一些 bean 来自动的给我们的容器注入我们需要的 bean ,于是就实现了自动装配。
四、@ComponentScan(重要)
包扫描功能,其实就是自动扫描并加载符合条件的组件(如@Component )或者 bean 定义, 最终将这些 bean 定义加载到 IOC 容器中. 也可以通过 basePackages 等属性来细粒度的定制 @ComponentScan 自动扫描的范围, 如果不指定, 则默认扫描 @ComponentScan 所在类的 package 及子包进行扫描。