在 AspectJ 中匹配 class 时 *+ 和 * 之间的区别?
Difference between *+ and * when matching a class in AspectJ?
鉴于这些切入点来自以下资源:
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
class 的任何 public 方法的所有 调用与任何参数匹配 returns void 前提是(&&运算符)调用在控制流中对 方法的任何调用:
- com.webtier 包中的任何 class(及其子classes) ;
- com.webtier 包中的任何摘要 class(其子classes) ;
- com.webtier包中的任何接口实现中的任何接口]com.webtier包;
现在,如果切入点是这样的:
pointcut methodCallFromWebTier() :
methodCalls() && cflow(call(* com.webtier.*.*(..)));
因此,如果没有 + 子类型 TypePattern 运算符,切入点是否相同?我的意思是,如果这个 everything 在 com.webtier 包里面,所以我真的看不出 [=42= 的用法]+ 在这里签名...
我错了吗?是否有一些我可能没有看到的边缘情况?
这个例子中真的需要加号吗?
感谢关注!
如果您使用的类型是 com.webtier
包中的子class 但不在 com.webtier
包中的类型,则加号会有所不同。加号意味着在计算 cflow 时也会考虑这些类型。如果在您的应用程序中没有发生这种情况,那么加号没有任何区别。
您的 Foo class 是否在 com.webtier
包中也会有所不同。如果是,那么对它的调用总是在 call(* com.webtier.*+.*(..))
的 cflow 中。如果是这种情况,我可能会使用 cflowbelow
而不是 cflow
。
鉴于这些切入点来自以下资源:
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
class 的任何 public 方法的所有 调用与任何参数匹配 returns void 前提是(&&运算符)调用在控制流中对 方法的任何调用:
- com.webtier 包中的任何 class(及其子classes) ;
- com.webtier 包中的任何摘要 class(其子classes) ;
- com.webtier包中的任何接口实现中的任何接口]com.webtier包;
现在,如果切入点是这样的:
pointcut methodCallFromWebTier() :
methodCalls() && cflow(call(* com.webtier.*.*(..)));
因此,如果没有 + 子类型 TypePattern 运算符,切入点是否相同?我的意思是,如果这个 everything 在 com.webtier 包里面,所以我真的看不出 [=42= 的用法]+ 在这里签名...
我错了吗?是否有一些我可能没有看到的边缘情况?
这个例子中真的需要加号吗?
感谢关注!
如果您使用的类型是 com.webtier
包中的子class 但不在 com.webtier
包中的类型,则加号会有所不同。加号意味着在计算 cflow 时也会考虑这些类型。如果在您的应用程序中没有发生这种情况,那么加号没有任何区别。
您的 Foo class 是否在 com.webtier
包中也会有所不同。如果是,那么对它的调用总是在 call(* com.webtier.*+.*(..))
的 cflow 中。如果是这种情况,我可能会使用 cflowbelow
而不是 cflow
。