1

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

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包中,所以我在这里看不到+号的用法......

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

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

感谢关注!

4

1 回答 1

2

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

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

于 2015-04-02T15:16:26.503 回答