简单介绍一下@SpringBootApplication注解都有哪些注解组合而成。
![a80345fae4d67a3c1757ec82ca4e381a.png](https://i-blog.csdnimg.cn/blog_migrate/57c2dd10606c5b32ae42d6051b9609f3.jpeg)
SpringBoot
一、@SpringBootApplication是SpringBoot的一个核心注解,也是一个组合注解。
二、@SpringBootApplication包含的注解详解
![916941d4066e10300ead7d82580e49b1.png](https://i-blog.csdnimg.cn/blog_migrate/a9c6d4becd862d8b6a7ddd5f0d1ddb0f.jpeg)
SpringBootApplication组合注解
1、@Target({ElementType.TYPE}) : 自定义所修饰的注解作用范围
1.1、ElementType包含: TYPE、FIELD、METHOD、PARAMETER、CONSTRUCTOR、LOCAL_VARIABLE、ANNOTATION_TYPE、PACKAGE、TYPE_PARAMETER、TYPE_USE
1.1.1、TYPE:用来描述类、接口(包括注解类型) 或enum声明 Class, interface
1.1.2、FIELD: 用来描述域 Field declaration
1.1.3、METHOD: 用来描述方法
1.1.4、PARAMETER: 用来描述参数
1.1.5、CONSTRUCTOR: 用来描述构造器
1.1.6、LOCAL_VARIABLE:用来描述局部变量
1.1.7、ANNOTATION_TYPE: 声明类型
1.1.8、PACKAGE:用来描述包
1.1.9、TYPE_PARAMETER:用来标注类型参数
1.1.10、TYPE_USE: 标注任何类型名称
2、@Retention(RetentionPolicy.RUNTIME) :定义所修饰的注解的生命周期
2.1、RetentionPolicy包含:SOURCE、CLASS、RUNTIME
2.1.1、SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃。
2.1.2、CLASS: 注解被保留到class文件,但jvm加载class文件时候被遗弃,默认的。
2.1.3、RUNTIME: 注解被保存到class文件中,jvm加载class文件之后也存在。
3、@Documented:用来标注生成javadoc的时候是否会被记录。
4、@Inherited:子类会继承父类的被@Inherited修饰过的注解。
5、@SpringBootConfiguration:其中只有一个核心注解:@Configuration。@SpringBootConfiguration是被SpringBoot封装的注解,@Configuration是java原生注解。其功能也一致,标注当前类是个配置类,被该注解标注的类提供的以@Bean定义的方法,都可以注入到Spring容器中,并被扫描到
6、@EnableAutoConfiguration:
![5dc19a56e506db35bd1f622c4a505af5.png](https://i-blog.csdnimg.cn/blog_migrate/08ec0ba4d446bc1709d7aabecf5ea2b4.jpeg)
@EnableAutoConfiguration注解
其中一个最关键的注解@Import({AutoConfigurationImportSelector.class}),讲AutoConfigurationImportSelector.class中能找到的配置都加载到IOC中。查看AutoConfigurationImportSelector.class可以发现,最终通过loadFactoryNames()方法,找到/META-INF目录下的spring.factories。SpringBoot集成的很多开源技术,都是通过spring.factories导入的。(本篇不主要介绍该注解,后期会专门讲解。)
7、@ComponentScan:默认扫描@SpringBootApplication所在类的同级包,可以理解成如果不加该注解,就无法扫描到Controller了。启动类和控制器在同一个包下;启动类所在的包高于控制器所在的包,的情况都可以被扫描到。也可以通过basePackages参数定义需要扫描的目录。