【问题标题】:How to find classes by multiple annotations from classpath?如何通过类路径中的多个注释查找类?
【发布时间】:2015-04-09 14:21:37
【问题描述】:

我想从类路径中查找定义了两个注释的所有类。

通常当需要其中一个注释时,我可以按如下方式查找它们(OR匹配):

ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
provider.addIncludeFilter(new AnnotationTypeFilter(Entity.class));
provider.addIncludeFilter(new AnnotationTypeFilter(CustomAnnotation.class));
Set<BeanDefinition> beans = provider.findCandidateComponents("com.xyz.abc");

如果我需要 AND 匹配,我需要更改哪些内容,以便只返回具有 both 注释的类?

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    您是否考虑过创建自己的过滤器?比如:

    final TypeFilter entityFilter = new AnnotationTypeFilter(Entity.class);
    final TypeFilter customFilter = new AnnotationTypeFilter(CustomAnnotation.class);
    TypeFilter andFilter = new TypeFilter {
        boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
            return entityFilter.match(metadataReader, metadataReaderFactory) && customFilter.match(metadataReader, metadataReaderFactory);
        }
    };
    provider.addIncludeFilter(andFilter);
    

    【讨论】:

    • 我不知道这是可能的,谢谢!使用 java8 会更好:TypeFilter AND_FILTER = (metadataReader, metadataReaderFactory) -&gt; entityFilter.match(metadataReader, metadataReaderFactory) &amp;&amp; customFilter.match(metadataReader, metadataReaderFactory);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多