您的位置:首页 > 编程语言 > Java开发

SpringBoot核心注解

2019-04-09 12:00 615 查看

@SpringBootApplication,该注解是一个组合注解,包含了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。下面我们来简单分析一下每一个注解分别是用来做什么的。

1.注解@SpringBootConfiguration

[code]@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}

这是一个复合注解,继承自@Configuration。二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
该注解类其实就相当于spring配置bean的xml文件。

2.注解@ComponentScan

[code]@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
    @AliasFor("basePackages")
    String[] value() default {};

    @AliasFor("value")
    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};

    Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;

    Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;

    ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;

    String resourcePattern() default ClassPathScanningCandidateComponentProvider.DEFAULT_RESOURCE_PATTERN;

    boolean useDefaultFilters() default true;

    Filter[] includeFilters() default {};

    Filter[] excludeFilters() default {};

    boolean lazyInit() default false;

    @Retention(RetentionPolicy.RUNTIME)
    @Target({})
    @interface Filter {
        FilterType type() default FilterType.ANNOTATION;

        @AliasFor("classes")
        Class<?>[] value() default {};

        @AliasFor("value")
        Class<?>[] classes() default {};

        String[] pattern() default {};

    }

}

自动搜索项目中所有的Spring组件,我们可以通过basepackage属性来制定扫描范围,如果没有指定,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。所以springboot的启动类最好放在root package下。

3.注解@EnableAutoConfiguration

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

    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    /**
     * Exclude specific auto-configuration classes such that they will never be applied.
     * @return the classes to exclude
     */
    Class<?>[] exclude() default {};

    /**
     * Exclude specific auto-configuration class names such that they will never be
     * applied.
     * @return the class names to exclude
     * @since 1.3.0
     */
    String[] excludeName() default {};

}

开启自动配置,将所有符合条件的@configuration配置都加载到当前spring的IOC容器当中。(springboot框架是如何知道哪些复合条件呢?基于@ConditionalOnClass(HealthIndicator.class)、@ConditionalOnBean(DiscoveryClient.class)、@ConditionalOnProperty这些类做到的,后面再分析)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: