【发布时间】:2016-03-20 18:35:23
【问题描述】:
我们正在寻找一种以高性能方式跟踪客户端 POJO 实例状态的解决方案。我们期望的是:每次对 POJO 进行更改时,都会使用 setter 来创建此状态。我们创建了一个基于 OGNL 的监视/事件总线,当进行更改时,我们将发送正确的 OgnlChangeEvent 到我们的事件总线。
到目前为止,我们研究了 AspectJ / cglib / object graph Diff 解决方案,但它们都占用了过多的 CPU 时间。我们当前的解决方案基于 Spring MethodInterceptor,每次调用 Getter 方法时,我们都会创建一个新的 Proxy 实例。
此时,我们开始研究代码生成解决方案,偶然发现了 Byte Buddy。这个方向是正确的方法吗?我们能否生成一个新的Class,它将扩展我们的客户端 POJO 状态并通知其 OGNL 前缀,直到调用 setter 方法?
【问题讨论】:
-
您能否详细说明一些测量的性能问题?您调用了多少次方法,没有更改跟踪的方法执行时间是多少,有更改跟踪的执行时间是多少,以及您在代码的更改跟踪部分中所做的工作概述?
-
我同意@NándorElődFekete。很难相信 AspectJ 应该比 Spring AOP 慢。如果是这样,您一定是做错了,因为 AspectJ 非常高效。如果我们看到您的方面,也许我们可以提供帮助。但是,如果您对 ByteBuddy 感到满意,那么此评论可能已过时。最近比较忙,没怎么看这里,可能有点晚了。
标签: java spring aspectj cglib byte-buddy