Spring-组件扫描过滤器使用教程及原理分析(三)

6 篇文章 0 订阅
4 篇文章 0 订阅

主页提供本章完整代码下载,供大家学习!

组件扫描器

在这里插入图片描述

@ComponentScan有如下属性:

value:指定要扫描的package;
includeFilters=Filter[]:指定只包含的组件
excludeFilters=Filter[]:指定需要排除的组件;
useDefaultFilters=true/false:指定是否需要使用Spring默认的扫描规则:被@Component, @Repository, @Service, @Controller或者已经声明过@Component自定义注解标记的组件;

在过滤规则Filter中:
FilterType:指定过滤规则,支持的过滤规则有
    ANNOTATION:按照注解规则,过滤被指定注解标记的类;
    ASSIGNABLE_TYPE:按照给定的类型;
    ASPECTJ:按照ASPECTJ表达式;
    REGEX:按照正则表达式
    CUSTOM:自定义规则;
value:指定在该规则下过滤的表达式;

在这里插入图片描述

根据注解类型过滤–annotation

@Configuration  //声明该类是spring核心配置类
@ComponentScan(value = "com.it",   // 开启注解格式  扫描com.it包下所有的注解
        excludeFilters =@ComponentScan.Filter(     //excludeFilter:排除过滤策略
                type = FilterType.ANNOTATION,  //根据注解过滤
                classes = Service.class        //Service注解类型
        ) )
public class SpringConfig {
}

在这里插入图片描述

根据自定义类型过滤–custom

  • 自定义一个过滤器(简单版
public class MyTypeFilter implements TypeFilter {   //实现TypeFilter接口 
    @Override
    //加载的类满足要求,匹配成功
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        return false;  //true:所有的都过滤  false:所有的都不过滤
    }
}
  • 自定义一个过滤器(过滤指定的类
public class MyTypeFilter implements TypeFilter {
    @Override
    //加载的类满足要求,匹配成功
    //metadataReader:读取到的当前正在扫描的类的信息。
    //metadataReaderFactory:可以获取到其他任务类的信息
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        //通过参数获取加载的类的元数据
        ClassMetadata classMetadata = metadataReader.getClassMetadata();
        //通过类的元数据获取类的名称
        String className = classMetadata.getClassName();
        //如果加载的类名满足过滤器要求,返回匹配成功
        if(className.equals("com.it.service.impl.UserServiceImpl")){
            //返回true表示匹配成功,返回false表示匹配失败。此处仅确认匹配结果,不会确认是排除还是加入,排除/加入由配置项决定,与此处无关
            return true;
        }
        return false;
    }
}
  • 配置类格式:
@Configuration  //声明该类是spring核心配置类
@ComponentScan(value = "com.it",   // 开启注解格式  扫描com.it包下所有的注解
        excludeFilters =@ComponentScan.Filter(     //excludeFilter:排除性过滤策略
                type = FilterType.CUSTOM,  //设置过滤方式为按照自定义类型进行过滤
                classes = MyTypeFilter.class        //自定义类型类型
        ) )

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值