Spring注解驱动第三讲--@Filter介绍

85 篇文章 0 订阅
84 篇文章 2 订阅

上一讲主要针对@ComponentScan注解做了一些说明,本文主要对@Filter的扫描条件,再做一些详细的介绍

1,FilterType.ANNOTATION 按照注解的方式进行扫描.后面classes属性,为注解的类型,如:

复制代码

@Configuration//标记此类为配置类
@ComponentScan(value="com.wxj",excludeFilters= {
        @Filter(type=FilterType.ANNOTATION,classes= {Controller.class})
})
public class MainConfig {
    //将标有@Controller注解的类排除在外不会加载到容器中来
}

复制代码

2,type=FilterType.ASSIGNABLE_TYPE,按照指定的类,进行过滤,后面的classes属性的值为"类名.class".如:

复制代码

@Configuration//标记此类为配置类
@ComponentScan(value="com.wxj",
includeFilters= {
        @Filter(type=FilterType.ASSIGNABLE_TYPE,classes= {BookService.class})
},useDefaultFilters=false)
public class MainConfig {
    //只会加载BookService,以及BookService的子类或者其实现类
}

复制代码

以上两种方式为常用的过滤方式.

3,FilterType.CUSTOM,按照自己自定义的方式来进行过滤和筛选(使用此过滤类型,虽然比较繁琐,但是使用起来完全可以由自己来定义扫描的规则)

首先定义@Filter注解的类型

复制代码

@Configuration//标记此类为配置类
@ComponentScan(value="com.wxj",
includeFilters= {        @Filter(type=FilterType.CUSTOM,classes{MyTypeFilter.class})
},useDefaultFilters=false)
public class MainConfig {
}

复制代码

MyTypeFilter即为自己定义的匹配方法,其中MyTypeFilter类中的match方法的返回值为true时,为符合过滤条件,如果返回为false,则不符合过滤条件,代码如下:

复制代码

public class MyTypeFilter implements TypeFilter {

    /**
     * MetadataReader metadataReader:获取当前正在扫描的类的信息
     * MetadataReaderFactory metadataReaderFactory,获取带其他任何类的信息
     * 
     */
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();//获取当前类的注解信息
        ClassMetadata classMetadata = metadataReader.getClassMetadata();//获取当前扫描的类信息
        Resource resource = metadataReader.getResource();//获取当前扫描的资源信息
        String name = classMetadata.getClassName();//获取类的名字
        if(name.contains("er")) {
            return true;//如果类的名字中带有"er",则符合过滤的要求
        }
        return false;
    }

}

复制代码

注:TypeFilter中的ASPECTJ和REGEX(正则方式),没有介绍,使用较少,有兴趣可以自行研究.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值