Eclipse里使用javassist实例_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Eclipse里使用javassist实例

Eclipse里使用javassist实例

 2013/8/30 19:09:17  qq54903099  程序员俱乐部  我要评论(0)
  • 摘要:这两天比较无聊,随便找点东西进行学习。目标就瞄准了javassist。关于javassist的介绍google一下,这里也不介绍了。对于某一个类,直接在编译好的.class文件插入一些内容。比如:packagetest.param;publicclassScreen{publicvoiddraw(inti,intj){System.out.println("movetoi,j");}}对于这个对象,我现在想在输出之前,把i,和j的值输出出来。如何使用javassist进行操作呢
  • 标签:使用 Eclipse Java 实例

这两天比较无聊,随便找点东西进行学习。目标就瞄准了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.

发表评论
用户名: 匿名