2

如前所述,我想在执行期间更改字节码。我没有运行任何类型的应用程序或 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

希望我说清楚了。

4

1 回答 1

1

JRebel swaps the bytes for you after you recompile, you do not have to call an API to achieve that.

于 2011-07-10T20:23:56.900 回答