覆盖 cglib 代理上的 equals

2023-12-09

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

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

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

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

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


不,使用 cglib 是不可能的。

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

声明一下:我是 Byte Buddy 的作者,也是 cglib 的维护者,它们都是 Apache 2.0 许可的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

覆盖 cglib 代理上的 equals 的相关文章

随机推荐