使用 JRebel 交换类的字节码

发布于 2024-11-19 10:22:48 字数 725 浏览 3 评论 0原文

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

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

我遇到了 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

潜移默化 2024-11-26 10:22:49

重新编译后,JRebel 会为您交换字节,您不必调用 API 来实现这一点。

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文