使用 JRebel 交换类的字节码
如前所述,我想在执行期间更改字节码。 我没有运行任何类型的应用程序或网络服务器,它只是用于命令行程序。
当然,我可以创建一个新的类加载器,但从性能的角度来看这是不可行的。
我遇到了 JRebel,它应该能够完成这些事情,但我找不到任何示例、教程来存档它。
Java Hotswap 不是一个选项,因为它无法处理多个类加载器
简单的例子来演示我想要什么:
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
希望我清楚地表达了我的观点。
As said, I'd like to change the bytecode during execution.
I am not running any sort of application or web server, it's just for a command line program.
Of course I could just create a new ClassLoader, but that's not feasible from the performance point of view.
I ran into JRebel, which should be capable of exactly this things, but I cannot find any examples, tutorial to archive this.
Java Hotswap is not an option, because it cannot deal with multiple Classloaders
Simple example to demonstrate what I want:
Class Car
{
public void print() { System.out.println("I am Type A"); }
}
First I wanna load class Car
:
Car myCar = new Car();
Do some stuff
myCar.print(); // => I am Type A
Change the source code
sourceCode.replace("Type A", "Type b");
Recompile and change the byte code in the same classloader
Execute same class again
myCar.print(); // => I am Type B
Hope I made my point clear.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
重新编译后,JRebel 会为您交换字节,您不必调用 API 来实现这一点。
JRebel swaps the bytes for you after you recompile, you do not have to call an API to achieve that.