资讯专栏INFORMATION COLUMN

如何利用javassist 动态生成代码

JellyBool / 1002人阅读

摘要:动态生成代码涉及到了字节码操作,通常动态性两种常用的实现方式,字节码操作,反射。动态改变某个类的结构。

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等反编译工具进行查看

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64876.html

相关文章

  • Java知识点总结(动态字节码操作-Javassist介绍)

    摘要:知识点总结动态字节码操作介绍知识点总结动态字节码操作运行时操作字节码可以让我们实现如下功能动态生成新的类动态改变某个类的结构添加删除修改新的属性方法常见的字节码操作类库,这是的项目的一部分。 Java知识点总结(动态字节码操作-Javassist介绍) @(Java知识点总结)[Java, 动态字节码操作] 运行时操作字节码可以让我们实现如下功能: 动态生成新的类 动态改变某个类的结...

    godruoyi 评论0 收藏0
  • Java动态编程初探

    摘要:动态编程使用场景通过配置生成代码,减少重复编码,降低维护成本。动态生成字节码操作字节码的工具有,其中有两个比较流行的,一个是,一个是。 作者简介 传恒,一个喜欢摄影和旅游的软件工程师,先后从事饿了么物流蜂鸟自配送和蜂鸟众包的开发,现在转战 Java,目前负责物流策略组分流相关业务的开发。 什么是动态编程 动态编程是相对于静态编程而言的,平时我们讨论比较多的静态编程语言例如Java, 与动态...

    赵连江 评论0 收藏0
  • Java 动态性(4) - 字节码操作

    摘要:字节码操作动态性的两种常见实现方式字节码操作反射运行时操作字节码可以让我们实现如下功能动态生成新的类动态改变某个类的结构添加删除修改新的属性方法优势比反射开销小性能高性能高于反射低于常见的字节码操作类库这是的项目的一部分是广泛使用的一种框它 1.字节码操作 JAVA动态性的两种常见实现方式字节码操作 反射 运行时操作字节码可以让我们实现如下功能动态生成新的类 动态改变某个类的结构(...

    CoderStudy 评论0 收藏0
  • Java知识点总结(动态字节码操作-Javassist的API使用)

    摘要:因此,若想对对象进行修改,必须对其进行解冻,通过方法进行生成一个方法生成一个方法通过反射调用生成的方法方法体前面和后面加执行语句方法体前面通过反射调用生成的方法张三生成属性和方法获取属性生成构造器可以在构造器前后加代码注解操作 Java知识点总结(动态字节码操作-Javassist的API使用) @(Java知识点总结)[Java, 动态字节码操作] 参考文章: 传送 操作示例: pu...

    U2FsdGVkX1x 评论0 收藏0
  • Android 性能监控系列一(原理篇)

    摘要:全称应用性能管理监控后面我会通过一系列的文章来介绍的原理框架设计与实现等等。在应用构建期间,通过修改字节码的方式来进行字节码插桩就是实现自动化的方案之一。 showImg(https://segmentfault.com/img/bVbbRX6?w=1995&h=1273); 欢迎关注微信公众号:BaronTalk,获取更多精彩好文! 一. 前言 性能问题是导致 App 用户流失的罪魁...

    yacheng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<