QDox代码解析

Posted justry_deng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QDox代码解析相关的知识,希望对你有一定的参考价值。

QDox代码解析


简介

QDox是一种高速、小巧的解析器。主要用于解析java源码,也能用于解析被类加载器加载了的class

maven坐标

<dependency>
    <groupId>com.thoughtworks.qdox</groupId>
    <artifactId>qdox</artifactId>
    <version>2.0.0</version>
</dependency>

解析被类加载器加载的class

QDox默认解析当前类加载器加载了的class。如果你有外部class或者jar想要被纳入QDox解析,你可以:

  • 方式一:用当前类加载器将外部class或者jar加载进来
  • 方式二:创建一个类加载器,然后用这个类加载器加载外部class或者jar,然后将这个类加载器添加至QDox
  • 方式三:…

示例:

// 使用自定义的类加载器加载外部jar或class (注:示例中这个自定义的类加载器不是QDox自带的,本人使用的是其它工具包下的类)
LoadJarClassHelper loadJarClassHelper = new LoadJarClassHelper();
loadJarClassHelper.loadNormalJar(
        Lists.newArrayList(new File("E:\\\\Maven\\\\Repository\\\\com\\\\idea-aedi\\\\component-dump-class\\\\2.6"
                + ".0\\\\component-dump-class-2.6.0.jar")), false, null, null);
URLClassLoader classLoader = loadJarClassHelper.getClassLoader();

// QDox构建器
JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder();
javaProjectBuilder.setEncoding(StandardCharsets.UTF_8.name());
// 将自定义的类加载器添加进QDox
javaProjectBuilder.addClassLoader(classLoader);

// 获取加载进来的外部jar或class总额类的信息
JavaClass javaClass = javaProjectBuilder.getClassByName("com.ideaaedi.component.dump.NonExitClassFileTransformerExecutor");
System.err.println(javaClass.getFields());

解析源码

QDox是一种高速、小巧的解析器。主要用于解析Java源码,也能用于解析被类加载器加载了的class。

示例:

// QDox构建器
JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder();
javaProjectBuilder.setEncoding(StandardCharsets.UTF_8.name());


// 通过addSource等相关方法, 将源码添加进QDox中 (注:可以多次添加)
javaProjectBuilder.addSourceTree(new File("E:\\\\Git\\\\Repository\\\\components\\\\component-decompile\\\\src\\\\main\\\\java\\\\"));


// 获取解析出来的JavaClass对象
javaProjectBuilder.getClasses().forEach(javaClass -> 
    /*
     * 获取信息
     */
    System.err.println("包名\\t" + javaClass.getPackageName());
    System.err.println("全类名\\t" + javaClass.getFullyQualifiedName());
    System.err.println("注释\\t" + javaClass.getComment());
    System.err.println("字段\\t" + javaClass.getFields());
    System.err.println("方法\\t" + javaClass.getMethods());
    System.err.println("源码\\t" + javaClass.getSource());
    System.err.println("注释上的标签\\t" + javaClass.getTags()); // 如注释上的@author JustryDeng,author即为标签名,JustryDeng即为标签值
    // .....
    
    /*
     * 判断信息
     */
    System.err.println("是否是抽象类\\t" + javaClass.isAbstract());
    System.err.println("是否是注解\\t" + javaClass.isAnnotation());
    System.err.println("是否是枚举\\t" + javaClass.isEnum());
    // .....


相关资料

以上是关于QDox代码解析的主要内容,如果未能解决你的问题,请参考以下文章

C语言解析JSON源码

从 WooCommerce 中的订单总额中删除运费总额

支付金额大于支付总额

WooCommerce 获得订单总额

深入解析数据仓库中的缓慢变化维

在 WooCommerce 中更改订单运费总额