第10章 Spring的ComponentScan注解深入分析

本文详细探讨了Spring的@ComponentScan注解,包括无参使用方法和指定Filter的5种类型。通过ComponentScanAnnotationParser解析注解,ClassPathBeanDefinitionScanner负责扫描并加载指定Bean。核心方法scanCandidateComponents用于构建BeanDefinition。文章还介绍了ResourcePatternResolver及其PathMatcher接口的匹配规则,提供了一些使用示例。
摘要由CSDN通过智能技术生成

@ComponentScan 注解和 @Configuration 注解结合使用,默认是用来扫描指定包下的被@Compoent 注解的类。@ComponentScan 注解有一些属性,如下所示。

@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 "**/*.class";

    boolean useDefaultFilters() default true;

    ComponentScan.Filter[] includeFilters() default {
   };

    ComponentScan.Filter[] excludeFilters() default {
   };

    boolean lazyInit() default false;

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

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

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

        String[] pattern() default {
   };
    }
}
无参使用方法
@Configuration
@ComponentScan
public class SpringComponentScanApp {
   
    private static ApplicationContext applicationContext;

    @Bean
    public ExampleBean exampleBean() {
   
        return new ExampleBean();
    }

    public static void main(String[] args) {
   
        applicationContext = 
          new AnnotationConfigApplicationContext(SpringComponentScanApp.class);

        for (String beanName : applicationContext.getBeanDefinitionNames()) {
   
            System.out.println(beanName);
        }
    }
}

参考:@ComponentScan

指定Filter

ComponentScan.Filter 有5中可用类型:

  • ANNOTATION
  • ASSIGABLE_TYPE
  • ASPECTJ
  • REGEX
  • CUSTOM

使用自定义注解。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值