栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring全注解之@CompontScan注解的自定义FilterType指定过滤规则(三)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring全注解之@CompontScan注解的自定义FilterType指定过滤规则(三)

目录

前沿

类型

ANNOTATION、按注解类型来判定,也是最常用的

ASSIGNABLE_TYPE、按指定类型来判定,也比较常用

ASPECTJ使用aspectj表达式,不怎么用

REGEX使用正则表达式,不怎么用

CUSTOM自定义规则


前沿

上篇文章我们讲解了@CompontScan的使用,比如我们在includeFilters中使用type = FilterType.ANNOTATION,classes = {Controller.class}来指定type。

类型

这里我们使用的是ANNOTATION,其实这里的type有以下几种类型

ANNOTATION、按注解类型来判定,也是最常用的

ASSIGNABLE_TYPE、按指定类型来判定,也比较常用
@ComponentScan(basePackages = {"com.zhujie"},includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class}),
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes = {UserService.class})

ASPECTJ使用aspectj表达式,不怎么用

REGEX使用正则表达式,不怎么用

CUSTOM自定义规则

首先得写一个实现了TypeFilter的实现类

public class MyTypeFilter implements TypeFilter {
    
    @Override
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        //获取被扫描的类的全类名
        String className = metadataReader.getClassMetadata().getClassName();

        System.out.println(className+"----------");
        if(className.contains("troller")){
//            如果类名中包含有troller则被注册到组件
            return true;
        }
        return false;
    }
}

然后再配置类中自定义即可

@Configuration
@ComponentScan(basePackages = {"com.zhujie"},includeFilters = {
        @ComponentScan.Filter(type = FilterType.CUSTOM,classes = {MyTypeFilter.class})
        },useDefaultFilters = false)
//excludeFilters 是一个数组
public class MainConfig {

    @Bean("use")
    public User getUser(){
        return new User(1001,"张三");
    }
}

 

 在运行之前的测试类会看到只有controller被注册到容器中

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/943305.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号