鉴于这些切入点取自以下资源:
http://maverick-amey.blogspot.ru/2007/12/using-cflow-and-cflowbelow-in-pointcuts.html
pointcut methodCalls() :
call(public void Foo.*(..)) ;
pointcut methodCallFromWebTier() :
methodCalls() && cflow(call(* com.webtier.*+.*(..)));
methodCallFromWebTier
切入点应该匹配对Foo
类的任何公共方法所做的所有调用以及任何返回void的参数 ,前提是(&& 运算符)调用位于对方法的任何调用的控制流中:
现在,如果切入点是这样的话:
pointcut methodCallFromWebTier() :
methodCalls() && cflow(call(* com.webtier.*.*(..)));
因此,如果没有 + 子类型TypePattern运算符,切入点是否相同?我的意思是,如果所有都在 com.webtier 包,所以我在这里看不到 + 符号的用法......
我错了吗?是否有一些我可能看不到的边缘情况?
在这个例子中,加号真的是必要的吗?
感谢您的关注!
答案 0 :(得分:2)
如果您使用的类型是com.webtier
包中的类型但不在com.webtier
包中的类型,则加号会有所不同。加号意味着在计算cflow时也会考虑这些类型。如果在您的应用程序中没有发生这种情况,则加号没有任何区别。
您的Foo类是否在com.webtier
包中也有所不同。如果是,那么对它的调用总是在call(* com.webtier.*+.*(..))
的cflow中。如果是这种情况,我可能会使用cflowbelow
代替cflow
。