当前位置:   article > 正文

ClassGraph:轻量级的java类路径和模块扫描器

classgraph

官方地址:https://github.com/classgraph/classgraph

ClassGraph具有“反转”Java类和/或反射API的能力,或者具有索引类和资源的能力。例如,Java类和反射API可以告诉你给定类的超类,或者给定类实现的接口,或者可以给你一个类的注释列表;ClassGraph可以找到所有扩展了给定类(给定类的所有子类)的类,或者所有实现给定接口的类,或者所有用给定注释标注的类。Java API可以在特定的ClassLoader中以特定的路径加载资源文件的内容,但ClassGraph可以在所有类加载器中找到并加载所有资源,其路径与给定的模式匹配。

  1. <dependency>
  2. <groupId>io.github.classgraph</groupId>
  3. <artifactId>classgraph</artifactId>
  4. <version>4.8.139</version>
  5. </dependency>

 示例

  1. public static void testDemo() {
  2. try (ScanResult scanResult = new ClassGraph().enableAllInfo().acceptPackages("packageName")// packageName为指定路径,如com.xx.yy
  3. .scan()) {
  4. ClassInfoList allClasses = scanResult.getAllClasses();
  5. for (ClassInfo allClass : allClasses
  6. ) {
  7. ClassInfoList methodInfo = allClass.getAnnotations();
  8. MethodInfoList methodInfos = allClass.getMethodInfo();
  9. String className = allClass.getName();
  10. System.out.println("方法信息:\n" + methodInfo);
  11. System.out.println("方法信息列表:\n" + methodInfos);
  12. System.out.println("类名\n" + className);
  13. }
  14. }
  15. }

查找某个路径下,被@xx注解标识的所有类

  1. public static void testDemo() {
  2. try (ScanResult scanResult = new ClassGraph().enableAllInfo().acceptPackages("packageName")// packageName为指定路径,如com.xx.yy
  3. .scan()) {
  4. // 示例为:packageName下,所有被@Test标识的类,返回结果为classA extends classB
  5. scanResult.getClassesWithAnnotation("org.testng.annotations.Test");
  6. }
  7. }

获取接口类名:

allClass.getInterfaces();

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/240359
推荐阅读
相关标签
  

闽ICP备14008679号