字节伙伴:将一个类的对象从一个类加载器转换为在另一个类加载器中加载的同一类

时间:2019-03-21 17:51:46

标签: byte-buddy

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

  1. 是否可以在类加载器Foo上有一个由A创建的对象,并转换为来自类加载器{{1]的Bar的对象}}?我现在想到的解决方案是基本上从B序列化对象,然后编辑序列化的字节以重命名类的名称。如果我可以使用Byte Buddy安全地执行操作,那将是很好的。另一种解决方案是使用Transloader

  2. 是执行上述SO answer

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

非常感谢您。

1 个答案:

答案 0 :(得分:1)

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