Eclipse里使用javassist实例

这两天比较无聊,随便找点东西进行学习。目标就瞄准了javassist。关于javassist的介绍google一下,这里也不介绍了。

 

对于某一个类,直接在编译好的.class文件插入一些内容。

 

比如:

package test.param;

public class Screen {

	public void draw(int i , int j){
		
		System.out.println("move to i,j");
	}
	
	
}

 对于这个对象,我现在想在输出之前,把i,和j的值输出出来。如何使用javassist进行操作呢?

 

package test.param;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.NotFoundException;

public class Test {
	public static void main(String[] args) throws NotFoundException, CannotCompileException, IOException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		ClassPool pool = ClassPool.getDefault();
		
		CtClass ctClass = pool.get("test.param.Screen");
		CtMethod ctm = ctClass.getDeclaredMethod("draw");
		ctm.insertBefore("{System.out.println(\"i=\"+($1)+\",j=\"+$2);}");
		ctClass.writeFile();//这里我不知道为什么写不到文件里,很纳闷。
		
		Method m = ctClass.toClass().getMethod("draw",Integer.TYPE,Integer.TYPE);
		Screen s = new Screen();
		m.invoke(s, 1,2);
	}
}

 执行这个main方法的时候,输出结果就是这样:

i=1,j=2

move to i,j

一个简单的例子,稍微熟悉一下javassist.

你可能感兴趣的:(java,javassist)