日志文章

2020-1-2 aflfte2011

使用javassist动态生成一个新的类

package com.aflfte.test;

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

/**
 * 测试javassist生成一个新的类
 *
 * @author root
 *
 */
public class Demo01 {
    public static void main(String[] args) throws Exception {
        ClassPool pool=ClassPool.getDefault();
        //动态生成类
        CtClass cc=pool.makeClass("com.aflfte.bean.emp");
        //创建属性
        CtField f=CtField.make("private int empno;", cc);
        CtField f2=CtField.make("private String ename;", cc);
        cc.addField(f);
        cc.addField(f2);
        //创建方法
        CtMethod m1=CtMethod.make("public int getEmpno(){return empno;}", cc);
        CtMethod m2=CtMethod.make("public void setEmpno(int empno){this.empno=empno;}", cc);
        cc.addMethod(m1);
        cc.addMethod(m2);
        //添加构造器
        CtConstructor ct=new CtConstructor(new CtClass[]{CtClass.intType,pool.get("java.lang.String")}, cc);
        ct.setBody("{this.empno=empno; this.ename=ename;}");
        cc.addConstructor(ct);
        cc.writeFile("/root/mywork/");//将上面构造好的类写入到工作空间
        System.out.println("成功生成类!");
    }
}

« javassist动态操作类的属性、方法、构造器、注解 | 测试脚本引擎执行javascript代码»