在AspectJ中匹配类时,*和*之间的差异?

时间:2015-04-01 18:14:02

标签: java aop aspectj pointcut

鉴于这些切入点取自以下资源:

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

  • com.webtier 包中的任何类(及其子类);
  • com.webtier 包中的任何抽象类(其子类);
  • com.webtier 包中任何界面的 com.webtier 包中的任何界面实施;

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

pointcut methodCallFromWebTier() : 
                     methodCalls() && cflow(call(* com.webtier.*.*(..)));

因此,如果没有 + 子类型TypePattern运算符,切入点是否相同?我的意思是,如果所有都在 com.webtier 包,所以我在这里看不到 + 符号的用法......

我错了吗?是否有一些我可能看不到的边缘情况?

在这个例子中,加号真的是必要的吗?

感谢您的关注!

1 个答案:

答案 0 :(得分:2)

如果您使用的类型是com.webtier包中的类型但不在com.webtier包中的类型,则加号会有所不同。加号意味着在计算cflow时也会考虑这些类型。如果在您的应用程序中没有发生这种情况,则加号没有任何区别。

您的Foo类是否在com.webtier包中也有所不同。如果是,那么对它的调用总是在call(* com.webtier.*+.*(..))的cflow中。如果是这种情况,我可能会使用cflowbelow代替cflow