cflow(pointcut):表示在执行连接点pointcut所匹配的函数时进行匹配,如下例所示:
function中的代码:
package com.gaojian.aspectj.test1; public class Function { public void f() { System.out.println("method excution!"); } public static void main(String[] args) { new Function().f(); } }
Test中的代码:
package com.gaojian.aspectj.test1; public class Test { public void foo(Function function) { function.f(); } public void foo1(Function function){ function.f(); } public static void main(String[] args) { new Test().foo(new Function()); System.out.println("*******differences**********"); new Test().foo1(new Function()); } }
执行test中的main函数运行结果为
before call f()
method excution!
*******differences**********
method excution!
程序分析:1:aj pointcut的execution(* f(..))匹配function中的f()函数;
2:在类Test中调用f()函数应该都要执行aj中的前置通知函数;
3:aj pointcut中有cflow(call(* com.gaojian.aspectj.test1.*.foo(..))):当执行连接点call(* com.gaojian.aspectj.test1.*.foo(..))匹配的函数Test中foo()函数的时候进行匹配。
4:所以test中的foo执行时,aj中的前置函数执行了;则test中的foo1执行时,aj中的前置函数未执行了。