在 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 前提是&&运算符)调用在控制流中对 方法的任何调用:

现在,如果切入点是这样的:

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