javassist可以对一个已经编译好了的.class文件的字节码进行改动,比如说我可以为一个类添加一个方法,添加一个属性,也可以修改一个方法等,还可以对一个方法,异常进行拦截等。
javassist的最外层的API和JAVA的反射包中的API颇为类似。它使你可以在装入ClassLoder之前,方便的查看类的结构。它主要由CtClass,,CtMethod,,以及CtField几个类组成。
java代码实例
public class Test {
public void say()throws Exception{
System.out.println("say:");
}
}
public class Test1 {
public static void main(String[] args)throws Exception{
ClassPool cp = ClassPool.getDefault();
CtClass ct = cp.get("Test");
CtMethod cm = ct.getDeclaredMethod("say");
cm.insertBefore("{System.out.print(/"lala,/");}");
cm.insertAfter("{System.out.print(/"Hello world!javassist!/");}");
Class c = ct.toClass();
Test t = (Test)c.newInstance();
t.say();
}
}
输出则为
lala,say
Hello world!javassist!
如需修改原代码内容使用
cm.insertBody();方法即可。