@SpringBootApplication注解

springbootapplication注解包括哪些注解_@SpringBootApplication 注解 详解


@SpringBootApplication注解源码


@Target({ElementType.TYPE}) //注解的作用域
@Retention(RetentionPolicy.RUNTIME) //注解的生存周期
@Documented //可以被文档化
@Inherited //注解用于标注一个父类的注解是否可以被子类继承
@SpringBootConfiguration //声明为一个配置类 proxyBeanMethods是否开启bean代理,默认是true,从IOC容器中取;如果是false则每次获取都是一个新的实例
@EnableAutoConfiguration //开启自动配置
@ComponentScan(
excludeFilters = {
@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}),
@Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class})
}
) //包扫描的规则
public @interface SpringBootApplication {
// ...
}

@Target

自定义所修饰的注解作用范围

+++ ElementType详解

ElementType

@Target(ElementType.ANNOTATION_TYPE)

  • TYPE
    • 用来描述类、接口(包括注解类型) 或enum声明 Class, interface
  • FIELD
    • 用来描述域 Field declaration
  • METHOD
    • 用来描述方法
  • PARAMETER
    • 用来描述参数
  • CONSTRUCTOR
    • 用来描述构造器
  • LOCAL_VARIABLE
    • 用来描述局部变量
  • ANNOTATION_TYPE
    • 声明类型
  • PACKAGE
    • 用来描述包
  • TYPE_PARAMETER
    • 用来标注类型参数
  • TYPE_USE
    • 标注任何类型名称
  • MODULE
  • RECORD_COMPONENT
    +++

@Retention

定义所修饰的注解的生命周期

+++ RetentionPolicy详解

RetentionPolicy

@Retention(RetentionPolicy.RUNTIME)

  • SOURCE
    • 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃。
  • CLASS
    • 注解被保留到class文件,但jvm加载class文件时候被遗弃,默认的。
  • RUNTIME
    • 注解被保存到class文件中,jvm加载class文件之后也存在。
      +++

@Documented

用来标注生成javadoc的时候是否会被记录。

@Inherited

子类会继承父类的被@Inherited修饰过的注解。

@SpringBootConfiguration

  • 标注这个类是一个配置类
  • @Configuration注解的派生注解
  • 与@Configuration注解的功能一致
  • @SpringBootConfiguration是springboot的注解,而@Configuration是spring的注解

@Configuration

@SpringBootConfiguration 注解的作用

@EnableAutoConfiguration

SpringBoot之@EnableAutoConfiguration注解

开启自动配置

@ComponentScan

  • 默认扫描@SpringBootApplication所在类的同级包
  • 启动类所在的包高于控制器所在的包,的情况都可以被扫描到
  • 可以通过basePackages参数定义需要扫描的目录