• 字节码操作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,反编译。

     

  • 相关阅读:
    【sybase】You can’t run SELECT INTO in this database的解决办法
    【IDEA】在IDEA中使用@Slf4j报错,找不到log
    【Java并发】线程的顺序执行
    MySQL报错码对照大全 清风徐来
    Java Swing日期控件的使用 清风徐来
    Android6.0使用BaiDu地图SDK动态获取定位权限 清风徐来
    Sublime Text 2学习记录
    Windows Phone开发笔记1:基础使用
    DirectX学习笔记:关于DX Component结构分析
    Windows 8 Metro开发学习笔记1
  • 原文地址:https://www.cnblogs.com/tutuhome/p/10679640.html
Copyright © 2020-2023  润新知