java - 覆盖 cglib 代理上的 equals

标签 java proxy equals cglib

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

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

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

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

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

最佳答案

不,使用 cglib 是不可能的。

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

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

关于java - 覆盖 cglib 代理上的 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57481209/

相关文章:

grails - 在equals和hashCode中说明hasMany关系

java - Android:将敏感字符串放入我的 Java 代码中是否安全?

java - 开始时的其他 Activity

javascript - 防止通过 MITM 代理对单个页面进行多次 JS 注入(inject)

proxy - TOR 作为 HTTP 代理而不是 SOCKS

java - JSObject.equals() 表示 JSObject.getWindow() 不等于 JSObject.getWindow()

java - XML 元素类型都是相同的

java - 如何从多个配置文件的 Autowiring 候选中排除 spring bean?

http - 编写 C HTTP 代理服务器——如何接收和重定向 HTTP 响应

javascript - 如果 1= ='1'//true 并且 1==true//true 那么为什么 1= ='true'//false