java动态生成代码_如何利用javassist 动态生成代码

java动态生成代码涉及到了字节码操作,通常 java 动态性两种常用的实现方式

1,字节码操作

2,反射。

运行时操作字节码可以实现如下功能

1,动态生成新的类。

2, 动态改变某个类的结构。

字节码操作 通常比反射开销小,性能高。

下面就是利用 javassist 动态生成的一个.class 文件

public static void main(String[] args) throws CannotCompileException, IOException, NotFoundException {

ClassPool pool = ClassPool.getDefault();

CtClass ct

= pool.makeClass("com.test.bean.Emp");

//创建属性

CtField e1

= CtField.make("public int no;",ct);

CtField e2

= CtField.make("public String name;",ct);

ct.addField(e1);

ct.addField(e2);

CtMethod m1 = CtMethod.make("public int getNo(){return no;}", ct);

CtMethod m2 = CtMethod.make("public void setNo(int no){return this.no = no;}", ct);

ct.addMethod(m1);

ct.addMethod(m2);

//添加构造器

CtConstructor constructor

= new CtConstructor(

new CtClass[]{CtClass.intType,pool.get("java.lang.String")},ct);//构造器的参数

constructor.setBody("{this.no = no; this.name=name;}");//构造器的方法体

ct.addConstructor(constructor);//如果不添加构造器 则会生成一个空的构造器

ct.writeFile("E:/JavaFile");//将构造好的类写出来

System.out.println("类生成功");

}

代码生成之后必须使用xjad等反编译工具进行查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值