0
点赞
收藏
分享

微信扫一扫

Springboot注解与分析之:@SpringBootApplication



Springboot注解与分析之:@SpringBootApplication


@SpringBootApplication(
exclude = {JacksonAutoConfiguration.class, 
WebMvcMetricsAutoConfiguration.class},
scanBasePackages = {"com.optics.data"}
)
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

按住Ctrl键并点击@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 {
    @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 = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};
}

由注解源码可以看出,@SpringBootApplication注解是一个复合注解,其中前面四个注解是Java元素,含义分别如下:

  • @Target({ElementType.TYPE}):类、接口(包括注解类型)和enum声明
  • @Retention(RetentionPolicy.RUNTIME):运行时注解
  • @Documented:将注解添加到Java doc中
  • @Inherited:允许继承

后面三个重要注解含义如下所示:

  • @SpringBootConfiguration:Spring Boot配置注解
  • @EnableAutoConfiguration:启用自动配置注解
  • @ComponentScan:组件自动扫描注解

可以将@SpringBootApplication注解理解为:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解的组合注解。

@SpringBootApplication注解含义:如果Application标注在某个类上说明这个类是Spring Boot的主配置类,Spring Boot会运行这个类的main方法来启动Spring Boot应用。


举报

相关推荐

0 条评论