spring boot 注解

1 简介

SpringBoot 的启动类里,默认使用了一个注解@SpringBootApplication

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

@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 {};

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

2 三个重要注解

@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。

2.1 @Configuration在SpringBoot中,被@Configuration 注解的类是一个配置类,相当于Spring中的xml配置文件。

2.2 @EnableAutoConfiguration
@EnableAutoConfiguration借助@Import注解使用AutoConfigurationImportSelector将所有符合自动配置条件的bean定义加载到Spring的IoC容器中。

源码如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {

    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};
    String[] excludeName() default {};
}

2.3 @ComponentScan
@ComponentScan的作用是开启Spring的自定扫描功能,将范围内被@Component 注解的类加载到容器中,并生成bean。可以通过basePackages等属性指定自动扫描的范围。如果不指定,则默认是从被@ComponentScan注解的类所在的package进行扫描,因此SpringBoot的启动类最好放在项目的root package下面,这样才能保证整个项目下的所有类都在扫描范围中。

3 @SpringBootApplication的4个属性

@SpringBootApplication 注解提供了4个属性可供配置:

exclude —— 根据Class对象来排除特定的类,不加入到Spring容器中,传入Class数组。
excludeName —— 根据类名来排除特定的类,不加入到Spring容器中,传入参数是类的全限定名数组。
scanBasePackages —— 指定自动扫描的包,参数是字符串数组。
scanBasePackageClasses —— 指定自动扫描的包,参数是Class对象数组。

posted @ 2019-12-06 17:26  Maxksad  阅读(636)  评论(0)    收藏  举报