• 字节码操作JAVAssist


    字节码操作Javassist

    字节码:字节码是设计被用来将代码高效的传送给多种软件平台、硬件平台,字节码的设计也实现了Java的平台无关性,字节码比机器码更抽象,它通常被认为是包含了一个可执行文件的二进制文件。

    Javassist是一个类库用于在java中编辑字节码。它允许在程序运行时定义一个新类在JVM加载时修改类文件

    面向切面编程(AOP):Javassist可以动态在一个类中增加一个新的方法,或者是在调用者或者被调用者的前(before)、后(after)、周围(around)加代码。

      Reflect:

    CtClass<-->java.lang.class 生成和操作类

    CtMethod<-->java.lang.reflect.Method生成和操作方法

    CtField<-->java.lang.reflect.Method.Field生成和操作属性。

    代码实现:使用javassist实现新的类

    准备工作:导入javassist.jar包

    1、获得类池:方法ClassPool classpool=ClassPool.getDefault();

    2、使用方法Pool.makeClass(String Str)创建类,参数是要建的类的位置以及名称

    3、类具备有属性方法构造器,一个一个构建

      (1) 创建属性:CtField f=CtField.make(String str,Class);第一个参数是属性的信息,第二个参数是第二步中创建的类,创建完属性之后使用类方法add()添加,如果有多个属性则应该多次使用方法。

      (2) 创建方法:CtMethod m=CtMethod.make(第一个参数是方法的源码,第二个参数是第二步中创建的类)创建完方法之后使用类方法add()添加

      (3) 添加构造器:CtConstructor constructor=new CtConstructor(newCtClass[]{CtClass.intType,pool.get(“java.lang.String”)},cc)

    constructor.setBody(“方法体”); setBody在Method中也有 使用方法add增加到类中

      (4) 写出:类.write(“工作空间”);

     

    查看生成的类需要用到XJAD,反编译。

     

  • 相关阅读:
    调用 验证码
    始终居中的弹出层
    jq常用
    ThinkPHP redirect 方法
    session 的生成和删除
    1355:字符串匹配问题(strs)
    1348:【例49】城市公交网建设问题
    1357:车厢调度(train)
    1358:中缀表达式值(expr)
    1351:【例412】家谱树
  • 原文地址:https://www.cnblogs.com/tutuhome/p/10679640.html
Copyright © 2020-2023  润新知