使用JRebel交换类的字节码



如前所述,我希望在执行期间更改字节码。我没有运行任何类型的应用程序或web服务器,它只是一个命令行程序。

当然,我可以创建一个新的ClassLoader,但从性能的角度来看,这是不可行的。

我遇到了JRebel,它应该能够做到这一点,但是我找不到任何例子,教程来存档。

Java Hotswap不是一个选项,因为它不能处理多个classloader

一个简单的例子来演示我想要的:

Class Car
{
   public void print() { System.out.println("I am Type A"); }
} 

首先我要加载类Car:

Car myCar = new Car();

做一些事情

myCar.print();  // => I am Type A

修改源代码

sourceCode.replace("Type A", "Type b");

重新编译和更改中的字节码相同的类加载器

再次执行相同的类

myCar.print(); // => I am Type B

希望我讲清楚了。

JRebel在您重新编译后为您交换字节,您不必调用API来实现这一点。

相关内容

  • 没有找到相关文章

最新更新