在 cglib 代理上覆盖 equals
Override equals on a cglib proxy
我想使用 CGLIB 代理将我自己的可重用 equals() 方法添加到现有对象。
对象不一定实现任何接口,我需要能够将代理对象转换为原始对象 class(无需获取代理目标)。
不幸的是,CGLIB 似乎实现了自己的 equals() 方法并确保只调用该方法:有一个私有静态 class (EqualsInterceptor) 其方法 intercept() 实现了合理的逻辑比较代理对象。
问题是这个方法最后将比较委托给目标对象:我需要重用目标 classes.
未实现的一些逻辑
使用标准代理,我能够拦截对 equals() 方法的调用并执行我的逻辑。问题是这些代理无法转换为原始 class.
看来只能在CGLIB库中重写一些classes了。这似乎不是个好主意。
不,使用 cglib 是不可能的。
您可以使用另一个库,例如 Byte Buddy,它允许您像任何其他方法一样拦截 equals
/hashCode
。
披露:我是 Byte Buddy 的作者和 cglib 的维护者,两者均获得 Apache 2.0 许可。
我想使用 CGLIB 代理将我自己的可重用 equals() 方法添加到现有对象。
对象不一定实现任何接口,我需要能够将代理对象转换为原始对象 class(无需获取代理目标)。
不幸的是,CGLIB 似乎实现了自己的 equals() 方法并确保只调用该方法:有一个私有静态 class (EqualsInterceptor) 其方法 intercept() 实现了合理的逻辑比较代理对象。 问题是这个方法最后将比较委托给目标对象:我需要重用目标 classes.
未实现的一些逻辑使用标准代理,我能够拦截对 equals() 方法的调用并执行我的逻辑。问题是这些代理无法转换为原始 class.
看来只能在CGLIB库中重写一些classes了。这似乎不是个好主意。
不,使用 cglib 是不可能的。
您可以使用另一个库,例如 Byte Buddy,它允许您像任何其他方法一样拦截 equals
/hashCode
。
披露:我是 Byte Buddy 的作者和 cglib 的维护者,两者均获得 Apache 2.0 许可。