Javaassist

在Javassist中,进行类表述的基本单元是CtClass(即“编译时的类”,compile time class)。组成程序的这些类会存储在一个ClassPool中,它本质上就是CtClass实例的一个容器。

ClassPool的实现使用了一个HashMap,其中key是类的名称,而value是对应的CtClass对象。

正常的Java类都会包含域、构造器以及方法。在CtClass中,分别与之对应的是CtField、CtConstructor和CtMethod。要定位某个CtClass,我们可以根据名称从ClassPool中获取,然后通过CtClass得到任意的方法,并做出我们的修改。如下所示:

image

Javassist提供的javassist.util.HotSwapper(3.1之前则是javassist.tools.HotSwapper,BTrace也是使用HotSwapper机制)类能够更加方便的动态重新加载类

虽然Javassist能够提供动态重新加载类的功能,不过由于它要求启用JPDA

https://www.cnblogs.com/zhjh256/p/6286198.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、简介 Javassist (JAVA programming ASSISTant) 是在 Java 中编辑字节...
    西华子阅读 920评论 0 1
  • 1 字节码 1.1 字节码 Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了...
    QuinnSun阅读 432评论 0 1
  • 作者简介泽恩,美团到店住宿业务研发团队工程师。 大家好,今天给大家推荐一篇Java字节码增强技术的文章,在实际工作...
    xiaotian是个混子阅读 1,061评论 2 16
  • (转载) 1. 字节码 1.1 什么是字节码? Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操...
    花神子阅读 1,401评论 0 5
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,281评论 2 7