如何检查 Hibernate 代理的代码长度?

How to check code length for Hibernate proxy?

我正在编写一个应用程序,它根据一些数据库信息编写 java 代码。当 byte-buddy 检查在我的一个大 class 上创建的 Hibernate 代理的代码长度时,我遇到了 MethodTooLargeException

如果我错了,请纠正我:据我所知,Hibernate 根据我的 class 动态创建了一个代理 class。这个 Hibernate Proxy class 在代码长度方面比原来的 class.

更大

我希望能够检查将要生成的 class 的代码长度(通过 byte-buddy + Hibernate Proxy),以防止我的应用程序写入 classes 这会导致当代码长度大于 65535 字节时出现运行时异常。

在这种情况下,我的 class EeWmo 在使用 Hibernate 代理时的代码长度大于限制,这就是发生运行时异常的原因。

我该如何处理这种情况?任何见解都会非常有帮助。

谢谢。

为避免在最可能的情况下产生性能开销,不会预先计算方法长度。代理将检测任何字段访问以添加脏标志,我认为没有办法避免此问题。理论上可以将一些代码移动到另一种方法,但我认为这不直观,因为它会改变堆栈跟踪,而且这也不是很常见的情况。

我建议您重构代码并拆分一些长方法。或者,您可以跳过相关 类 的检测。