在运行时扫描 Java 注解

新手上路,请多包涵

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

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

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

原文由 Alotor 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 473
2 个回答

使用 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());

原文由 Arthur Ronald 发布,翻译遵循 CC BY-SA 3.0 许可协议

另一个解决方案是 ronmamo 的 Reflections

快速复审:

  • 如果您使用的是 Spring,则 Spring 解决方案是必经之路。否则它是一个很大的依赖性。
  • 直接使用ASM有点麻烦。
  • 直接使用 Java Assist 也很笨拙。
  • Annovention 超轻巧方便。还没有 Maven 集成。
  • Reflections 索引所有内容,然后速度非常快。

原文由 Jonathan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题