zoukankan      html  css  js  c++  java
  • springboot 配置文件其它补充【转】【补】

    TypeFilter组件扫描类过滤器

    MyTypeFilter.java

    可以对扫描的类做过滤处理,将扫描到的类替摘除或追加到spring窗口中

    package com.bobo.code.filter;
    
    import org.springframework.core.io.Resource;
    import org.springframework.core.type.AnnotationMetadata;
    import org.springframework.core.type.ClassMetadata;
    import org.springframework.core.type.classreading.MetadataReader;
    import org.springframework.core.type.classreading.MetadataReaderFactory;
    import org.springframework.core.type.filter.TypeFilter;
    
    import java.io.IOException;
    
    public class MyTypeFilter implements TypeFilter {
    
        /**
         *
         * MetadataReader 读取到当前正在扫描类的信息
         * MetadataReaderFactory 可以获取到其他任何类信息
         *
         * @param metadataReader
         * @param metadataReaderFactory
         * @return
         * @throws IOException
         */
        @Override
        public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
            ClassMetadata classMetadata = metadataReader.getClassMetadata();
            System.out.println("当前正在被扫描的类的类名: " + classMetadata.getClassName());
            if (classMetadata.getClassName().contains("Service")){
                //AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
                //for (String s : annotationMetadata.getAnnotationTypes()) {
                //    System.out.println("当前正在被扫描的类注解类型: " + s);
                //}
    
                //Resource resource = metadataReader.getResource();
                //System.out.println("当前正在被扫描的类存放的地址: " + resource.getURL());
                System.out.println("匹配到的类名: " + classMetadata.getClassName());
                return true;
            }else{
                return false;
            }
        }
    
    }

    FilterType类型

    public enum FilterType {
        ANNOTATION,//按照注解方式
        ASSIGNABLE_TYPE,//按照指定类型的方式
        ASPECTJ,//使用ASPECTJ表达式的方式-------没用过,不演示
        REGEX,//利用正则表达式进行指定-----------没用过,不演示
        CUSTOM//自己实现TypeFilter接口进行自定义规则(如下面的代码)
    }

    定义和使用

    @ComponentScan(value = "com.sisi.code", useDefaultFilters = false, includeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM, classes = MyTypeFilter.class) })//includeFilters中useDefaultFilters 必须等于 false
    @ComponentScan(value = "com.sisi.code", useDefaultFilters = true,  excludeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM, classes = MyTypeFilter.class) })//excludeFilters时useDefaultFilters 必须等于 true(默认本来就为true)
    public class MyConfiguration {
    
    }

    规则

    includeFilters的match为结果true时,则被扫描到的组件最终会包含到sping的bean组件中 , includeFilters中useDefaultFilters 必须等于 false
    excludeFilters的match结果为true时,则被扫描到的组件最终不会含到sping的bean组件中
    如果includeFilters和excludeFilters都被命中,且都返回了true,则以includeFilters为更高优先级,即只要被包含一次就不会被剔除.
    且TypeFilter的匹配规则永远只触发一次, 会被同时应用到includeFilters和excludeFilters中

    .

    感觉空虚寂寞,只是因为你无所关注,无处付出。
  • 相关阅读:
    java 基础语法 2
    hdu4570Multi-bit Trie
    poj1244Slots of Fun
    二维凸包模板
    花神的数论题(数位dp)
    poj1113Wall(凸包)
    poj1066Treasure Hunt(线段相交)
    poj1039Pipe(直线交点、叉积)
    hdu4588Count The Carries
    hdu2475Box(splay树形转线性)
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/14448741.html
Copyright © 2011-2022 走看看