Spring注解驱动-FilterType过滤类型

FilterType过滤类型

ANNOTATION:注解过滤
ASSIGNABLE_TYPE:指定类型过滤
ASPECTJ:ASPECTJ表达式过滤
REGEX:REGEX过滤
CUSTOM:自定义过滤

public enum FilterType {
    ANNOTATION,
    ASSIGNABLE_TYPE,
    ASPECTJ,
    REGEX,
    CUSTOM;

    private FilterType() {
    }
}

1.使用指定的类型作为过滤的条件
在这里插入图片描述
结果
在这里插入图片描述

2.重点的是自定义过滤规则

自定义规则的创建方式
1.创建类实现接口TypeFilter
2.在接口的方法内进行设置过滤的规则
3.中的类MetadataReader :表示当前正在被扫描的类


/**
 * @project_name:hibernate02
 * @date:2019/8/18:10:53
 * @author:shinelon
 * @Describe: 自定义过滤规则
 */
public class MyFilterType  implements TypeFilter {


    /**
     *  此方法作为过滤的方法
     * @param metadataReader  代表当前正在扫描的类
     * @param metadataReaderFactory 可以通过此对象获取到的其他扫描过的类
     * @return
     * @throws IOException
     */
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {

        //获取的是当前类的所有注解
        AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();

      //获取到所有的类关系,如父类子类接口等
ClassMetadata classMetadata = metadataReader.getClassMetadata();
System.out.println(classMetadata.getClassName());//获取类的名称

        //获取类的资源 如路径地址等
        Resource resource = metadataReader.getResource();

        return false;
    }
}

获取相关的类信息

在这里插入图片描述

2.设置自定义过滤的方式
如果包含则er返回true表示不过滤创建该对象

/**
 * @project_name:hibernate02
 * @date:2019/8/18:10:53
 * @author:shinelon
 * @Describe: 自定义过滤规则
 */
public class MyFilterType  implements TypeFilter {


    /**
     *  此方法作为过滤的方法
     * @param metadataReader  代表当前正在扫描的类
     * @param metadataReaderFactory 可以通过此对象获取到的其他扫描过的类
     * @return
     * @throws IOException
     */
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {

        //获取的是当前类的所有注解
        AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
        //获取到所有的类关系,如父类子类接口等
        ClassMetadata classMetadata = metadataReader.getClassMetadata();
        //获取类的资源 如路径地址等
        Resource resource = metadataReader.getResource();
        String className = classMetadata.getClassName();
        //设置自定义过滤条件,只要扫描的类名称包含e则返回true
        if(className.contains("er")){
            return true;
        }
        return false;
    }
}
/**
 * @project_name:hibernate02
 * @date:2019/8/17:20:10
 * @author:shinelon
 * @Describe:  注解配置类
 */

@Configuration //告诉Spring此类为配置类
@ComponentScan(value = "com.itguigu",useDefaultFilters = false,excludeFilters = {
        //不扫描包含的注解
//        @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class}),
//        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes = BookController.class),
       // @ComponentScan.Filter(type = FilterType.CUSTOM,classes = {MyFilterType.class})
},includeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM ,classes = {MyFilterType.class})})//使用自定义的过滤器创建bean
public class MyConfiguration {


    @Bean("person")//bean注解就是相当于在配置文件内的bean标签一样  默认情况下 方法的名字为bean的名称
    public Person person1(){
        return new Person("GuoQi","1234");
    }
}

结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值