Spring注解驱动-注解包扫描

包注解扫描

@ComponentScan 注解用于替代在配置文件内<context:component-scan base-package=""标签的作用并且注解ComponentScan是和标签一致的,也包含标签的全部属性配置
ComponentScan 注解源码
ComponentScan 注解支持重复注解可以在一个类上使用多个ComponentScan注解前提是JDK1.8

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

    @AliasFor("value")//扫描指定的包
    String[] basePackages() default {};
    //包下的指定的class对象
    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;//注解
        //过滤的class对象
        @AliasFor("classes")
        Class<?>[] value() default {};

        @AliasFor("value")
        Class<?>[] classes() default {};
        //过滤的格式
        String[] pattern() default {};
    }
}

配置类

@Configuration //告诉Spring此类为配置类
@ComponentScan(value = "com.itguigu",useDefaultFilters = false,excludeFilters = {
        //不扫描包含的注解
        @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
})
public class MyConfiguration {


    @Bean("person")//bean注解就是相当于在配置文件内的bean标签一样  默认情况下 方法的名字为bean的名称
    public Person person1(){
        return new Person("GuoQi","1234");
    }
}

测试类


@Test
public void test1(){
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfiguration.class);
    String[] beanDefinitionNames = context.getBeanDefinitionNames();//获取容器内的存在的名称
    for (String name: beanDefinitionNames
         ) {
        System.out.println(name);
    }
}

在这里插入图片描述

不包含的情况下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值