Byte Buddy:将 class 的对象从一个 class 加载程序转换为在另一个 class 加载程序中加载的相同 class

Byte Buddy: Convert an object of a class from one class loader to same class loaded in another class loader

我正在探索 Byte Buddy 是否适合我使用。我正在看这个 ,它讨论了如何使用 Byte Buddy,可以使用 class Foo 加载 class 加载程序 A,将其重命名为 Bar 并在另一个 class 加载程序 B 上重新定义它。这是令人难以置信的。 我的问题是:

  1. 是否有可能在 class 加载程序 A 上创建一个从 Foo 创建的对象并转换为 Bar 的对象来自 class 加载程序 B?我现在想到的解决方案基本上是从 Foo 序列化对象,然后编辑序列化字节以重命名 class 的名称。如果我能和字节好友一起安全地做到这一点就好了。另一种解决方案是使用 Transloader.

  2. 是 java-agent 或执行上述 SO

  3. 中描述的所有事情所需的任何特殊工具

非常感谢。

您始终可以在另一个 class 加载程序中加载 class,而无需使用 Java 代理。至于翻译 class,将一个 class 名称的符号替换为另一个名称应该不是问题,但您需要注意串行版本的 UID,其中 class 的名称可能是一部分。 Byte Buddy 是一个代码生成库,不会为此类操作添加任何额外的帮助。