Pointcut: 在程序中捕捉或者标识连接点(joint point)的,捕捉到连接点后,可以在连接点执行的前面或者后面设置一些规则。
在AspectJ中,Pointcut可以是匿名的也可以是命名的。匿名的pointcut附着在使用它们的地方,如一个Advice或者另一个pointcut的定义中。
如:
before():execution(* *.*(..)){
}
红字部分就是一个匿名的pointcut。
public
pointcut logNew():execution(*.new())&& !within(Log);
一个名字为logNew的pointcut.
Pointcut由几个部分组成:访问限制 pointcut关键字 名称(): 类型关键字
信号(signature);
如上面的命名pointcut,public是一个访问限制;pointcut是一个关键字,表明这是一个pointcut;logNew()是一个名称(pointcut)的名称;execution是pointcut的类型;(*.new())&&
!within(Log);是一个signature,跟类型关键字联合起来,说明这是一个捕捉除了在Log方面的其它类的构造函数的执行的一个pointcut。
通配符与Pointcut操作符:
AspectJ支持三种通配符
* 任意长度的字符
如 Account* 表示用Account开头的字符串
.. 任意长度的字符,或任意层
account..*
任意包account的子包或者类型。
+ 一个给定的类型的任意子类或者子接口。
Account+
任意Account的子类或者子接口。
AspectJ支持一元操作符“!”和二元操作符“&&”、“||”。
!,用来将某些特定的类型pointcut排除在捕捉的连接点之外;
&&,捕捉的连接点必须满足两个pointcut;
||,捕捉的连接点只要满足两个pointcut之一即可。