zoukankan      html  css  js  c++  java
  • springboot @ComponentScan排除指定类

    因为A工程依赖于B工程,B工程为某些通用模块的工程,含有controller、service等通用业务。这时A项目会配置@ComponentScan扫码B工程的包,由于某种原因需要排除某些被@Service标注的类,不将他们加入spring容器中,于是就用上了@ComponentScan的excludeFilters属性。

    使用方法

    excludeFilters属性需要传递@ComponentScan.Filter注解
    该注解需指定FilterType,FilterType共有下面5种选择:

    • ANNOTATION
      筛选含有某个注解的,例如
      @ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,value = {ExcludeComponent.class}))
      其中ExcludeComponent是我个人指定的注解可以自己建,只要有该注解标注就会被排除。

    • ASSIGNABLE_TYPE 筛选指定类型的

    • ASPECTJ 筛选匹配给定AspectJ类型模式表达式的

    • REGEX 筛选正则表达式匹配的

    • CUSTOM 自定义筛选

    自定义

    自定义规则需继承org.springframework.core.type.filter.TypeFilter类,实现match方法即可。例如:

    public class CustomFilter implements TypeFilter {
    
        private static final String PACKAGE = ".aaa.";
    
        @Override
        public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) {
            // 可以通过MetadataReader获得各种信息,然后根据自己的需求返回boolean,实例表示包名含有aaa路径的类名将满足筛选条件。
            return metadataReader.getClassMetadata().getClassName().contains(PACKAGE);
        }
    
    }
    
    

    配置
    @ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.CUSTOM, classes = CustomFilter.class))
    结果就是含有aaa路径的类名将被排除不被加入spring容器中。

    注意事项

    如果工程中存在多个@ComponentScan,需要都进行excludeFilters配置否排除会失效!!!

  • 相关阅读:
    关于TextField
    判断一个显示对象是否移除
    不争气的Discuz!NT 3.6和MVC3整合,主要实现同步登录和注册,登出。
    我的博客是英文的
    TFS不提供 Team Foundation 服务的解决办法。
    四 为提高entity framework 性能,要注意哪些事情.
    三 EF 和ado.net 的性能对比.
    一 关于大项目的经验总结
    在.net 中,ajax 如何调用本页数据源
    关于有序guid 的使用
  • 原文地址:https://www.cnblogs.com/chwwww/p/14186422.html
Copyright © 2011-2022 走看看