学习总结 - Java 字节码操作类库

常见的字节码操作类库

1.BCEL

Byte Code Engineering Library(BCEL),这是Apache Software Foundation的Jakarta项目的一部分。BCEL是Java classworking 广泛使用的一种框架,它可以让您深入jvm汇编语言进行类库操作的细节。BCEL与javassist有不同的处理字节码方法,BCEL在实际的jvm指令层次上进行操作(BCEL拥有丰富的jvm指令集支持) 而javassist所强调的是源代码级别的工作。
2.ASM
是一个轻量级Java字节码操作框架,直接涉及到JVM底层的操作和指令
高性能,高质量
3.CGLB(code generation library)
  生成类库,基于ASM实现
4.javassist
是一个开源的分析,编辑和创建Java字节码的类库。性能较ASM差,跟cglib差不多,但是使用简单。很多开源框架都在使用它。

Javassist 使用类池 javassist.ClassPool 类跟踪和控制所操作的类。其工作方式与 JVM 类装载器非常相似,但是有一个重要的区别是它不是将装载的、要执行的类作为应用程序的一部分链接,类池使所装载的类可以通过 Javassist API 作为数据使用。可以使用默认的类池,它是从 JVM 搜索路径中装载的,也可以定义一个搜索自定义路径列表的类池。甚至可以直接从字节数组或者流中装载二进制类,以及从头开始创建新类。

装载到类池中的类由 javassist.CtClass 实例表示。与标准的 Java java.lang.Class 类一样, CtClass 提供了检查类数据(如字段和方法)的方法。不过,这只是 CtClass 的部分内容,它还定义了在类中添加新字段、方法和构造函数、以及改变类、父类和接口的方法。奇怪的是,Javassist 没有提供删除一个类中字段、方法或者构造函数的任何方法。

字段、方法和构造函数分别由 javassist.CtField、javassist.CtMethod 和 javassist.CtConstructor 的实例表示。这些类定义了修改由它们所表示的对象的所有方法的方法,包括方法或者构造函数中的实际字节码内容。

 

 

consult:

Java学习之动态编译--字节码操作--javassist类库

https://blog.csdn.net/haitaofeiyang/article/details/44264685

使用cglib动态创建java类

https://www.cnblogs.com/zxf330301/p/5798241.html

Java逆向基础之动态生成类

http://blog.51cto.com/7317859/2106653

CGLIB学习札记---生成CLASS的命名规则

https://flyfoxs.iteye.com/blog/2076294

Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

https://blog.csdn.net/luanlouis/article/details/24589193

你可能感兴趣的:(java,面试,经验)