【发布时间】:2013-08-10 13:36:40
【问题描述】:
我有两个不同的方面类来计算执行测试程序的非静态方法调用的数量。第一个方面计算“调用”连接点上的方法:
pointcut methodCalls() : call (!static * test..*(..));
before(): methodCalls() {
counter.methodCallCounter();
}
而第二个方面计算“执行”连接点上的方法:
pointcut methodCalls() : execution (!static * test..*(..));
before(): methodCalls() {
counter.methodCallCounter();
}
methodCallCounter() 是计数器类中的静态方法。
小测试程序的方法调用次数是一样的。但是,当我用更大的程序更改测试程序时,第二个方面类(带有执行切入点)中的方法调用次数多于带有调用切入点的方面类中的方法调用次数。这是合理的,因为呼叫加入点不会挑选出使用 super 进行的呼叫,因此不会计算它们。
但是,我遇到了一个情况,对于程序的具体执行,带有“调用切入点”的切面类中的非静态方法调用的数量高于带有“执行切入点”的切面类中的方法调用的数量。我找不到任何解释为什么会发生这种情况。对第二种情况的原因的任何想法表示赞赏。
【问题讨论】:
-
不确定...我建议打印出一些有关差异的信息。也许打印出“thisJoinPoint”对象。
-
call() 和 execute() 有很多不同之处,请阅读这篇博文:perfspy.blogspot.com/2013/09/…。