java字节码操作
java动态性的两种常见方式:
-字节码操作
-反射
运行时操作字节码可以让我们实现如下功能:
-动态生成新的类
-动态改变某个类的结构(添加/删除/修改 新的属性)
优势:
-比反射开销小,性能高。
-JAVAasist性能高于反射,低于ASM
常见的字节码操作类库
-BCEL
-ASM
-CGLIB
-Javaassist 性能较ASM差,跟cglib差不多,但是用用简单,很多框架都在使用

Javaassist库的简单使用

package com.fei.pass;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtConstructor;
import javassist.CtField;
import javassist.NotFoundException;

public class TestJavaAssist {
public static void main(String[] args) throws Exception {
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.makeClass("com.fei.pass.Emp1");
cc.addField(CtField.make("private String name;", cc));

CtConstructor ctConstructor = new CtConstructor(new CtClass[]{
pool.get("java.lang.String")
}, cc);
ctConstructor.setBody("{ this.name = name ;}");
cc.addConstructor(ctConstructor);
cc.writeFile();
}

}