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