10.1 在运行时扫描Java注释 | Java Debug 笔记

389 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:在运行时扫描Java注释 、 在整个类路径中搜索带注释的类的最佳方法是什么?

我正在做一个库,我想允许用户注释他们的类,所以当Web应用程序启动时,我需要扫描整个类路径以查找某些注释。

您知道执行此操作的库或Java工具吗?

编辑:我正在考虑类似Java EE 5 Web服务或EJB的新功能。您用@WebService或注释类,@EJB系统在加载时会找到这些类,因此可以远程访问它们。

回答1: API

组件提供程序,它从基本程序包中扫描类路径。 然后,它将排除和包括过滤器应用于结果类以查找候选对象。

ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(<DO_YOU_WANT_TO_USE_DEFALT_FILTER>);

scanner.addIncludeFilter(new AnnotationTypeFilter(<TYPE_YOUR_ANNOTATION_HERE>.class));

for (BeanDefinition bd : scanner.findCandidateComponents(<TYPE_YOUR_BASE_PACKAGE_HERE>))
    System.out.println(bd.getBeanClassName());

回答2:

您可以使用ClassGraph查找带有任何给定注释的类,以及搜索其他感兴趣的条件,例如 实现给定接口的类。 (免责声明,我是ClassGraph的作者。)ClassGraph可以为内存中的所有类图(所有类,注释,方法,方法参数和字段),或列入白名单软件包中的类,类路径上的所有类或其中的类建立抽象表示。

您可以根据需要查询该类图。 与其他任何扫描仪相比,ClassGraph支持更多的类路径规范机制和类加载器,并且还可以与新的JPMS模块系统无缝协作,因此,如果您的代码基于ClassGraph,则代码将具有最大的可移植性。

请在此处查看API。