将 java 对象写入 class 文件

write java object into class file

是否有任何方法可以将加载的 Java 对象写入 .class 文件,或者是否有任何其他类型的文件可以轻松读取以表示实例的属性。

例如,CGLIB 将创建一个扩展另一个代理 bean,我真的想将这个增强的 bean 导出到 file 以查看它是如何增强的。

对于cglib,实例只能被序列化,并且只有实例的方法拦截器支持序列化。没有别的办法了。

为了获得 cglib 生成的 class 文件,您可以调用

void generateClass(ClassVisitor v)

方法。此方法可以采用 ASM ClassWriter,它可以在调用该方法后发出表示 class 文件的字节数组。然而,这个 class 文件本身并不能帮助你,因为 cglib 需要明确地初始化 class,例如将回调处理程序注入 class 的字段。这是在图书馆内部完成的。但是,有了手头的 class 文件和调试模式自省,您可以添加这些部分并了解增强的 class 是如何工作的。

最后,如果我可以向您推荐 cglib 的替代方案,这一切都更容易,请查看 Byte Buddy,它具有直接的 API 用于提取 class文件,并且还提供与此 class 文件并行的所谓 LoadedTypeInitializers。后面的初始化器包含 class 的任何设置逻辑并且易于阅读。此外,它们本身是可序列化的。

在 JDK

中使用 HSDB 工具
  1. 保留你的程序运行宁
  2. 运行 HSDB工具:

    java-class路径“$JAVA_HOME/lib/sa-jdi.jar”sun.jvm.hotspot.HSDB

  3. 输入程序pid

  4. 选择工具,你可以保存.class文件,这就是你想要的