覆盖等于 cglib 代理



我想使用 CGLIB 代理将我自己的可重用 equals() 方法添加到现有对象中。

这些对象不一定实现任何接口,我需要能够将代理对象强制转换为原始类(无需获取代理的目标)。

不幸的是,CGLIB 似乎实现了自己的 equals() 方法,并确保只调用该方法:有一个私有静态类 (EqualsInterceptor),其方法 intercept() 实现了比较代理对象的合理逻辑。 问题在于,这种方法最后将比较委托给目标对象:我需要重用一些目标类未实现的逻辑。

使用标准代理,我能够拦截对 equals() 方法的调用并执行我的逻辑。问题是这些代理不能强制转换为原始类。

似乎唯一的方法是重写 CGLIB 库中的一些类。这似乎不是一个好主意。

不,使用 cglib 这是不可能的。

您可以使用另一个库,例如Byte Buddy,它允许您像任何其他方法一样拦截equals/hashCode

为了披露:我是Byte Buddy的作者和cglib的维护者,两者都是Apache 2.0许可的。

最新更新