• Javassist之使用字节码在运行时生成新的类 01


    介绍

      Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态"AOP"框架。

      关于java字节码的处理,目前有很多工具,如bcel,asm。不过这些都需要直接跟虚拟机指令打交道。如果你不想了解虚拟机指令,可以采用javassist。javassist是jboss的一个子项目,其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。

    依赖包:

            <!--javassist-->
            <dependency>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>3.23.1-GA</version>
            </dependency>

    源码:

     1 package org.study2.JavaSenior.annotation.javassistDemo;
     2 
     3 import javassist.*;
     4 
     5 /**
     6  * @Auther:GongXR
     7  * @Date:2018/10/30
     8  * @Description: 使用字节码在运行时生成新的类 (javassist工具类)
     9  **/
    10 public class JavassistDemo1 {
    11     public static void main(String[] args) throws Exception {
    12         ClassPool pool = ClassPool.getDefault();
    13         CtClass cc = pool.makeClass("com.test.Emp");
    14 
    15 //创建属性
    16         CtField f1 = CtField.make("private int empno;", cc);
    17         CtField f2 = CtField.make("private String ename;", cc);
    18         cc.addField(f1);
    19         cc.addField(f2);
    20 
    21 //创建方法
    22         CtMethod m1 = CtMethod.make("public int getEmpno(){return empno;}", cc);
    23         CtMethod m2 = CtMethod.make("public void setEmpno(int empno){this.empno=empno;}", cc);
    24         cc.addMethod(m1);
    25         cc.addMethod(m2);
    26 
    27 //添加构造器
    28         CtConstructor constructor = new CtConstructor(new CtClass[]{CtClass.intType, pool.get("java.lang.String")}, cc);
    29         constructor.setBody("{this.empno=empno; this.ename=ename;}");
    30         cc.addConstructor(constructor);
    31 
    32         cc.writeFile("C:/Temp"); //将上面构造好的类写入到:/Temp中
    33         System.out.println("生成类,成功!");
    34     }
    35 }

    在"C:/Temp"下生产对应的class文件

  • 相关阅读:
    Windows10系统PHP开发环境配置
    hexo博客MathJax公式渲染问题
    js获取单选框和复选框的值并判断值存在后允许转跳
    Google HTML/CSS 编码规范
    js阻止表单提交的两种方法
    php下安装动态扩展库的相关事项
    PHP程序员的职业规划,走进PHP后端工程师的世界
    allen今天来开通我的程序员的博客
    ajax
    jQuery语法
  • 原文地址:https://www.cnblogs.com/gongxr/p/9882039.html
Copyright © 2020-2023  润新知