zoukankan      html  css  js  c++  java
  • Spring注解驱动第三讲--@Filter介绍

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

  • 相关阅读:
    disable_irq与disable_irq_nosync使用场景
    linux中断处理原理分析
    工作队列(workqueue) create_workqueue/schedule_work/queue_work
    使用git建立远程仓库,让别人git clone下来
    C中字符串的几种定义方法及说明
    Linux 2.6内核Makefile浅析
    探究platform_driver中的shutdown用途
    匆匆
    至强CPU性能排行,从X3210起,由低至高排列。
    Linux 命令行快捷键
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/12071433.html
Copyright © 2011-2022 走看看