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
上重新定义它。这是令人难以置信的。
我的问题是:
是否有可能在 class 加载程序 A
上创建一个从 Foo
创建的对象并转换为 Bar
的对象来自 class 加载程序 B
?我现在想到的解决方案基本上是从 Foo
序列化对象,然后编辑序列化字节以重命名 class 的名称。如果我能和字节好友一起安全地做到这一点就好了。另一种解决方案是使用 Transloader.
是 java-agent 或执行上述 SO
中描述的所有事情所需的任何特殊工具
非常感谢。
您始终可以在另一个 class 加载程序中加载 class,而无需使用 Java 代理。至于翻译 class,将一个 class 名称的符号替换为另一个名称应该不是问题,但您需要注意串行版本的 UID,其中 class 的名称可能是一部分。 Byte Buddy 是一个代码生成库,不会为此类操作添加任何额外的帮助。
我正在探索 Byte Buddy 是否适合我使用。我正在看这个 Foo
加载 class 加载程序 A
,将其重命名为 Bar
并在另一个 class 加载程序 B
上重新定义它。这是令人难以置信的。
我的问题是:
是否有可能在 class 加载程序
A
上创建一个从Foo
创建的对象并转换为Bar
的对象来自 class 加载程序B
?我现在想到的解决方案基本上是从Foo
序列化对象,然后编辑序列化字节以重命名 class 的名称。如果我能和字节好友一起安全地做到这一点就好了。另一种解决方案是使用 Transloader.是 java-agent 或执行上述 SO
中描述的所有事情所需的任何特殊工具
非常感谢。
您始终可以在另一个 class 加载程序中加载 class,而无需使用 Java 代理。至于翻译 class,将一个 class 名称的符号替换为另一个名称应该不是问题,但您需要注意串行版本的 UID,其中 class 的名称可能是一部分。 Byte Buddy 是一个代码生成库,不会为此类操作添加任何额外的帮助。