精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-02-24
public aspect Aspect1{ pointcut p();: call(* CflowTest.foo(..););; pointcut q();: call(* CflowTest.bar(..););; /*before();: cflow( p(); && q(); );{ System.out.println("before: "+thisJoinPoint);; }*/ before();: cflow(p();); && cflow(q();); && !within(Aspect1);{ System.out.println("before: "+thisJoinPoint);; } } 加上&& !within(Aspect1)是为了防止死循环 |
|
返回顶楼 | |
发表时间:2004-02-27
public aspect Aspect1{ pointcut callF();: call(* CflowTest.f(..);); && cflow(call(* CflowTest.foo(..);););; before();: callF();{ System.out.println("before call f();");; } } 如图 |
|
返回顶楼 | |
发表时间:2004-02-27
public aspect Aspect1{ pointcut callF();: call(* CflowTest.f(..);); && cflow(call(* CflowTest.bar(..);););; before();: callF();{ System.out.println("before call f();");; } } 如图 |
|
返回顶楼 | |
发表时间:2004-04-08
你们好像没有讨论清楚,可以看看这里
引用 切点合成 切点可以使用操作符与(&&)、或(||)和非(!)。这样可以使用简单的原始切点来创建强大功能的切点。当使用原始切点cflow和cflowbelow进行组合时,可能会有些迷糊。例如,cflow(p)捕捉p流程内(包括P在内)的所有连接点,可以使用图形表示 P --------------------- \ \ cflow of P \ 那么cflow(P) && cflow(Q)捕捉的是什么呢?它捕捉同时处于P和Q流程中的连接点。 P --------------------- \ \ cflow of P \ \ \ Q -------------\------- \ \ \ cflow of Q \ cflow(P) && cflow(Q) \ \ 注意P和Q可能没有任何公共的连接点,但是它们的程序流程中可能有公共的连接点。 Cflow(P && Q)又是什么意思呢?它的意思是被P和Q共同捕捉的连接点的流程。 P && Q ------------------- \ \ cflow of (P && Q) \ 如果P和Q没有捕捉到公共的连接点,那么在(P&&Q)的程序流程中不可能有任何连接点。下面代码表明上述意思 public class Test { public static void main(String[] args) { foo(); } static void foo() { goo(); } static void goo() { System.out.println("hi"); } } aspect A { pointcut fooPC(): execution(void Test.foo()); pointcut gooPC(): execution(void Test.goo()); pointcut printPC(): call(void java.io.PrintStream.println(String)); before(): cflow(fooPC()) && cflow(gooPC()) && printPC() { System.out.println("should occur"); } before(): cflow(fooPC() && gooPC()) && printPC() { System.out.println("should not occur"); } } |
|
返回顶楼 | |
发表时间:2004-04-08
比如说fooPc()&&gooPc(),代表了它们的定义中的连接点的一个交集,而非这两个切点流程的交集。
|
|
返回顶楼 | |