javassist学习:动态创建二进制Java类二进制字节码并通过反射调用的示例

示例如下代码:

package com.buaa.javassist;

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

public class Demo03 {
	
	public static void main(String[] args) throws Exception {
		ClassPool pool = ClassPool.getDefault();
		
		//创建一个新类
		CtClass cc = pool.makeClass("com.buaa.javassist.Person");
		
		//添加两个属性
		CtField cf1 = CtField.make("private String name;", cc);
		CtField cf2 = CtField.make("private int age;", cc);
		cc.addField(cf1);
		cc.addField(cf2);
		
		//创建一个方法
		CtMethod cm = CtMethod.make("public void fun(){System.out.println(\"Hello Man .\");}", cc);
		cc.addMethod(cm);
		
		//创建一个构造器
		CtConstructor con = new CtConstructor(new CtClass[]{pool.get("java.lang.String"),CtClass.intType},cc);
		con.setBody("{this.name = name;this.age = age;}");
		cc.addConstructor(con);
		
		//写入到一个文件中
		cc.writeFile("e:/zzzjava");
		System.out.println("类创建完成!");
	}
}

注意:生成的类可通过反编译工具(如XJad)打开查看。

你可能感兴趣的:(java)