基础篇-SpringBootApplication注解解析

Springboot的启动类非常简单,其中最关键的两部分是Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)。本文中主要对@SpringBootApplication进行相关解析。

@SpringBootApplication注解源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
  ......
}

从源码来看@SpringBootApplication是一个复合注解,包括@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration。

  • @SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
  • @ComponentScan,扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。
  • @EnableAutoConfiguration 的作用是开启自动配置。@EnableAutoConfiguration注解的意思就是Springboot根据你添加的jar包来配置你项目的默认配置,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvc和tomcat,就会自动的帮你配置web项目中所需要的默认配置

@SpringBootApplication参数详解

public @interface SpringBootApplication {
    @AliasFor(annotation = EnableAutoConfiguration.class)
    Class<?>[] exclude() default {};

    @AliasFor(annotation = EnableAutoConfiguration.class)
    String[] excludeName() default {};

    @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
    String[] scanBasePackages() default {};

    @AliasFor(annotation = ComponentScan.class, attribute = "nameGenerator")
    Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;

    @AliasFor(annotation = Configuration.class)
    boolean proxyBeanMethods() default true;

}
  • Class<?>[] exclude() default {}:根据class来排除,排除特定的类加入spring容器,传入参数value类型是class类型。
  • String[] excludeName() default {}:根据class name来排除,排除特定的类加入spring容器,传入参数value类型是class的全类名字符串数组。
  • String[] scanBasePackages() default {}:指定扫描包,参数是包名的字符串数组。
  • Class<?>[] scanBasePackageClasses() default {}:扫描特定的包,参数类似是Class类型数组。
  • Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class:对应的bean名称的生成器 默认的是BeanNameGenerator
  • boolean proxyBeanMethods() default true:属性默认值是true,也就是说该配置类会被代理
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章