将java对象写入类文件
是否有任何方法可以将加载的Java对象写入将java对象写入类文件,java,proxy,bytecode,cglib,Java,Proxy,Bytecode,Cglib,是否有任何方法可以将加载的Java对象写入.class文件,或者是否有任何其他类型的文件可以轻松读取以表示实例的属性 例如,CGLIB将创建一个扩展另一个的代理bean,我真的想将这个增强的bean导出到一个文件,看看它是如何增强的。对于CGLIB,实例只能序列化,并且只有在实例的方法拦截器支持序列化的情况下。没有别的办法 为了获得cglib生成的类文件,可以调用 void generateClass(ClassVisitor v) 方法。此方法可以采用ASMClassWriter,调用该方法
.class
文件,或者是否有任何其他类型的文件可以轻松读取以表示实例的属性
例如,CGLIB将创建一个扩展另一个的代理bean,我真的想将这个增强的bean导出到一个
文件,看看它是如何增强的。对于CGLIB,实例只能序列化,并且只有在实例的方法拦截器支持序列化的情况下。没有别的办法
为了获得cglib生成的类文件,可以调用
void generateClass(ClassVisitor v)
方法。此方法可以采用ASMClassWriter
,调用该方法后,它可以发出表示类文件的字节数组。但是,这个类文件本身对您帮助不大,因为cglib需要显式初始化该类,例如,将回调处理程序注入类的字段中。这是在库内部完成的。但是,通过手头的类文件和调试模式内省,您可以添加这些片段并了解增强类的工作方式
最后,如果我可以向您推荐一个cglib的替代方案,其中所有这些都比较简单,那么请看一看,它有一个用于提取类文件的直接向前API,并且还提供了与此类文件并行的所谓的LoadedTypeInitializer
s。后面的初始值设定项包含类的任何设置逻辑,并且易于阅读。而且,它们本身是可序列化的。在JDK中使用HSDB工具
保持程序运行
运行HSDB工具:
java-classpath“$java_HOME/lib/sa jdi.jar”sun.jvm.hotspot.HSDB
输入程序pid
选择工具,您可以保存.class文件,这就是您想要的
您可以使用反射API来分析java运行时对象实例cglib源代码-您可以将java对象序列化为json字符串或流,并使用gson进行反序列化。谢谢,所以不要考虑对象实例。有没有办法将generateClass()
生成的enhanced class
写入.class
文件?将ClassWriter
作为参数传递。之后,在writer上调用toByteArray
,返回表示类文件的byte[]
数组。但是首先需要ClassReader
,但是ClassReader
构造函数需要classbyte[]
数据。但我所拥有的只是类aClass=CglibEnhancedProxy.Class
。我不知道如何将aClass
转换为byte[]
。不是ClassReader
,你需要一个ClassWriter
-注意编写者。哦,我明白了。但这似乎帮不了什么忙。因为这个问题是链接到的,所以看起来很难获得增强器。也许值得一提的是,保存的类文件存储在当前目录中,即your/package/TheClass.class
。