Byte Buddy - 处理生成的类中的循环引用

时间:2016-10-17 19:46:03

标签: java byte-buddy

我试图在某个类图中围绕类生成运行时包装器,但是当图中有一个循环时,我不知道如何处理这种情况。 想象一下,A类有一个B类型的字段,但B类有一个A类字段。我想生成类A'和B'所以A级'有一个B'和B'有一个A'类型的字段。 在Byte Buddy中,方法" defineField"可以接收TypeDefinition类型的参数。我认为必须有一种方法可以为尚未定义的类型定义TypeDefinition,但我还没有找到它。

1 个答案:

答案 0 :(得分:0)

您可以使用TypeDescription.Latent定义此类字段,但风险自负。 Byte Buddy将此视为一个特定的,未经验证的用例,因为考虑到相互依赖性,类型重定义非常复杂。

确保在正确定义潜在类型之前不加载类型。此外,您可能需要通过DynamicType.Unloaded方法将这两种类型合并为一个include。此外,您应该注意,如果有问题的VM急切地验证注入的类型,ClassLoadingStrategy.Default.INJECT策略可能不起作用。由于您一次只能注入一种类型,因此在循环类型定义中,注入第一种类型时至少会丢失一种类型。考虑使用不受此限制的ClassLoadingStrategy.Default.WRAPPER策略。

这就是说,你可以毫无问题地做到这一点,但你可以体验VerifierError你通常承诺不会经历的事情。