0

这两个切入点有什么区别?我什么时候应该使用一种结构而不是另一种结构?

pointcut first_pointcut(): target(MyClass) && call(void myMethod(..))
pointcut second_pointcut(): call(void MyClass.myMethod(..))

我在阅读AspectJ Programming Guide时开始感到困惑。本指南中的一些示例将使用如下签名模式将切入点应用程序限制为特定类:

call(public * Figure.* (..))

它“挑选出对 Figure 的公共方法的每个调用。” 其他示例使用 target 将切入点应用程序限制为某些类,如下所示:

pointcut setter(): target(Point) &&
               (call(void setX(int)) ||
                call(void setY(int)));

它“在 Point 的实例上调用时挑选出对 setX(int) 或 setY(int) 的每个调用。”

4

1 回答 1

1

Target 需要一个指定类的实例,而 call 本身没有这样的限制。这意味着仅带有 call(..) 的切入点也可以捕获静态方法执行,而带有 target(Class) 的切入点则不能。它只捕获在指定类的对象上执行的方法(因此名称为“目标”)。

于 2013-08-29T21:02:56.120 回答