字节码使用Javassist在运行时重新加载类「替换 原方法输出不一样的结果」 实时加载类

Posted 九师兄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节码使用Javassist在运行时重新加载类「替换 原方法输出不一样的结果」 实时加载类相关的知识,希望对你有一定的参考价值。

1.概述

上一篇文章:【字节码】javassist 定义属性以及创建方法时多种入参和出参 类型的使用

转载来源于:小傅哥的字节码编程-(公众号:bugstack虫洞栈) 仅供学习。并且做了稍微修改。

通过前面两篇 javassist 的基本内容,大体介绍了;类池(ClassPool)、类(CtClass)、属性(CtField)、方法(CtMethod),的使用方式,并通过创建不同类型的入参出参方法,基本可以掌握如何使用这样的代码结构进行字节码编程。

那么,今天我们尝试使用 javassist 去修改一个正在执行中的类里面的方法内容。也就是在运行时重新加载类信息

可能在你平时的 CRUD 开发中并没有想到过这样的 烧操作,但它却有很多的应用场景在使用,例如;

  1. 热部署常用在生产环境中,主要由于这样的系统不能频繁启停且启动耗时较长的应用。
  2. 另外一些组件化风控模型包,给外部使用。当模型包进行升级时并不需要外部重新部署,甚至不需要让你知道升级了。
  3. 再者会用于开发、调试中,可以非常有效的提升编码效率,解放码农的右手和左手。

人的大脑很难创造未知的事物,所以需要学习。

2.案例目标

以上是关于字节码使用Javassist在运行时重新加载类「替换 原方法输出不一样的结果」 实时加载类的主要内容,如果未能解决你的问题,请参考以下文章

字节码增强之Javassist

字节码增强之Javassist

字节码增强之Javassist

Javassist/ASM 框架比较

Javassist/ASM 框架比较

springboot 整合javassist详解