在运行时扫描 Java 注释

2022-08-31 05:17:20

如何在整个类路径中搜索带注释的类?

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

我正在考虑类似Java EE 5 Web Services或EJB的新功能。您可以使用 or 对类进行批注,系统会在加载时找到这些类,以便可以远程访问它们。@WebService@EJB


答案 1

Use org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider

应用程序接口

从基包扫描类路径的组件提供程序。然后,它将排除和包含筛选器应用于生成的类以查找候选项。

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

另一个解决方案是ronmamo的Reflections

快速查看:

  • 如果您使用的是Spring,弹簧解决方案是要走的路。否则,这是一个很大的依赖性。
  • 直接使用 ASM 有点麻烦。
  • 直接使用Java Assist也很笨拙。
  • Annovention超轻巧方便。还没有专家集成。
  • 反射索引所有内容,然后非常快。

推荐