它是什么?
SpringBootApplication是Springboot的核心注解,也是一个组合注解,使用在SpringBoot项目的启动类上,在项目初次启动的时候会快速扫描配置和搭建SpringBoot应用程序。
由什么注解组合而成?
有@Target @Retention @Documented @Inherited @SpringBootConfiguration @EnableAuto Configuration @ComponentScan 组成,其中@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 是核心注解。
大家也可以点击启动类的@SpringBootApplication注解进去看看。
@SpringBootConfiguration
SpringBoot的专用配置注解,表明这是一个配置类,它是@Configuration注解的一个特殊形式,相当于包装了@Configuration注解。@Configuration是一个专用于配置的注解,当一个类上使用了@Configuration注解,就说明这个类用于定义和提供Spring容器所需要的Bean实例。
@EnableAutoConfiguration
看到Enable就说明这个注解是开启什么东西的,继续看到后面的Configuration,就可以知道这个注解大概就是开启SpringBoot自动配置机制的。它会根据我们添加到SpringBoot应用程序中的依赖进行自动配置,例如,,我们添加了spring-boot-start-web,就会自动将项目配置为一个web应用程序。
@ComponentScan
它表示Spring自动搜索我们的项目,将项目中@component@Service@Repository@Controller等注解的类,并将他们注解为Spring上下文中的bean,默认情况下会从声明这个注解的类(启动类)开始扫描。
@Target
它应在那个注解就表示这个注解可以应用的Java元素类型,例如@Target({Elementtype.TYPE})表明这个注解只能应用在类,接口或者枚举上。
@Retention
它表示被它注解的注解可以保留多久,下面是它的几种枚举:
SOURCE:注解只保留在原代码中,当java文件编译为class文件时,注解失效。
CLASS:注解被保留到class文件,当jvm加载class文件的时候,注解失效。
RUNTIME:jvm加载完class文件后也存在。