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