上一讲主要针对@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(正则方式),没有介绍,使用较少,有兴趣可以自行研究.

Spring注解驱动第三讲--@Filter介绍的更多相关文章

  1. Spring 注解驱动(一)基本使用规则

    Spring 注解驱动(一)基本使用规则 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 一.基本使用 @Configur ...

  2. Spring 注解驱动(二)Servlet 3.0 注解驱动在 Spring MVC 中的应用

    Spring 注解驱动(二)Servlet 3.0 注解驱动在 Spring MVC 中的应用 Spring 系列目录(https://www.cnblogs.com/binarylei/p/1019 ...

  3. 【Spring注解驱动开发】组件注册-@ComponentScan-自动扫描组件&指定扫描规则

    写在前面 在实际项目中,我们更多的是使用Spring的包扫描功能对项目中的包进行扫描,凡是在指定的包或子包中的类上标注了@Repository.@Service.@Controller.@Compon ...

  4. 【Spring注解驱动开发】自定义TypeFilter指定@ComponentScan注解的过滤规则

    写在前面 Spring的强大之处不仅仅是提供了IOC容器,能够通过过滤规则指定排除和只包含哪些组件,它还能够通过自定义TypeFilter来指定过滤规则.如果Spring内置的过滤规则不能够满足我们的 ...

  5. 【Spring注解驱动开发】在@Import注解中使用ImportSelector接口导入bean

    写在前面 在上一篇关于Spring的@Import注解的文章<[Spring注解驱动开发]使用@Import注解给容器中快速导入一个组件>中,我们简单介绍了如何使用@Import注解给容器 ...

  6. 【Spring注解驱动开发】如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!

    写在前面 在[String注解驱动开发专题]中,前面的文章我们主要讲了有关于如何向Spring容器中注册bean的知识,大家可以到[String注解驱动开发专题]中系统学习.接下来,我们继续肝Spri ...

  7. 【Spring注解驱动开发】BeanPostProcessor在Spring底层是如何使用的?看完这篇我懂了!!

    写在前面 在<[String注解驱动开发]面试官再问你BeanPostProcessor的执行流程,就把这篇文章甩给他!>一文中,我们详细的介绍了BeanPostProcessor的执行流 ...

  8. 【Spring注解驱动开发】你还不会使用@Resource和@Inject注解?那你就out了!!

    写在前面 我在 冰河技术 微信公众号中发表的<[Spring注解驱动开发]使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?>一文中,介绍了如何使 ...

  9. 【Spring注解驱动开发】如何实现方法、构造器位置的自动装配?我这样回答让面试官很满意!

    在 冰河技术 微信公众号前面的文章中,我们介绍了如何使用注解来自动装配Spring组件.之前将的都是在来的字段上添加注解,那有没有什么方法可以实现方法.构造器位置的自动装配吗?今天我们就一起来探讨下如 ...

随机推荐

  1. Vue学习之生命周期钩子小结(四)

    一.生命周期钩子(函数): 1.每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运 ...

  2. Spring中基于注解的IOC(一):基础介绍

    1. Spring中的常用注解 注解配置和xml配置要实现的功能都是一样的,都要降低程序的耦合,只是配置的形式不一样 xml中配置示例: 注解分类: 1.用于创建对象的注解 它们的作用就和在xml中编 ...

  3. Android-----File(文件各种操作)

    在Android编程中,操作文件是基本的必备技能,现在做一个操作文件的小工具:DocumentTool.java 代码如下: package com.hs.example.exampleapplica ...

  4. 从CMS到G1:LinkedIn个人主页调优实战

    本文转载自公众号:阿飞的博客,阅读大约需要13分钟.阿飞是我认识几年的好友,对技术有很强的专研精神,跟他讨论GC问题的时候一些观点都很深刻. LinkedIn中的个人主页是访问量最多的页面之一,它允许 ...

  5. 复盘一篇讲sklearn库的文章(下)

    skleran-处理流程 获取数据 以用sklearn的内置数据集, 先导入datasets模块. 最经典的iris数据集作为例子. from sklearn import datasets iris ...

  6. vimplus基本操作

    1. YouCompleteMe按tab键,自动补全 2. vim-commentary添加注释,以及取消注释gcc 注释当前行(普通模式)gc 可视模式下,注释当前选中的部分gcu 撤销上一次注释的 ...

  7. img垂直居中div - css样式

    参考: https://www.jianshu.com/p/f1b570eabe33 html: <div class="showImg" style="text- ...

  8. (二)Kubernetes kubeadm部署k8s集群

    kubeadm介绍 kubeadm是Kubernetes项目自带的及集群构建工具,负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤,kubeadm是Kubernetes集群全生命周期的管理 ...

  9. seaborn---调色板

    一.样式控制 1.set([context,style,palette,font,...]) 一步设定美学参数. 2.axes_style([style,rc]) 返回参数字典,用于绘图的美学风格. ...

  10. php迭代器模式(iterator pattern)

    ... <?php /* The iterator pattern is used to traverse a container and access its elements. In oth ...