Java 使用JRebel交换类的字节码

Java 使用JRebel交换类的字节码,java,classloader,hotswap,jrebel,Java,Classloader,Hotswap,Jrebel,如前所述,我希望在执行期间更改字节码。 我没有运行任何类型的应用程序或web服务器,它只是一个命令行程序 当然,我可以创建一个新的类加载器,但从性能的角度来看,这是不可行的 我遇到了JRebel,它应该能够完全做到这一点,但我找不到任何例子,教程来存档 Java热交换不是一个选项,因为它不能处理多个类加载器 演示我想要什么的简单示例: Class Car { public void print() { System.out.println("I am Type A"); } } 首先,

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

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

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

Java热交换不是一个选项,因为它不能处理多个类加载器

演示我想要什么的简单示例:

Class Car
{
   public void print() { System.out.println("I am Type A"); }
} 
首先,我要加载class
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来实现这一点。

我正在寻找一个函数,如:JRebel.change(“car”、myClassloader、newByteCode[]);我不想将jrebel与应用服务器等一起使用。文件系统上不会有任何.class文件。我只需要在内存中交换字节码的功能,这确实需要一些额外的代码编写。我想SDK可以帮上忙