格式:
执行(modifiers-pattern )? ret-type-pattern declaring-type-pattern? 名称-参数(param-pattern ) throws-pattern? )括号中的每个pattern分别表示为:
修饰符匹配? )返回值匹配(ret-type-pattern )可以在*中表示任何返回值,类路径匹配(如完整路径的类名) declaring-type-pattern? )方法名称匹配(name-pattern )表示所有方法名称或),set )是以set开头的所有方法参数匹配)指定特定的参数类型第一个参数是任意类型,第二个参数是字符串类型。 可以用零个或多个任意参数的异常类型匹配(throws-pattern ) )表示吗? 其中有”? ”后面是可选的
让我们看几个例子:
1 ) execution(*(* (() ) /表示符合所有方法;2 ) execution (public * com.savage.service.userservice.* ) ) ) 表示匹配com.savage.server包及其子包下的所有方法
在Spring 2.0中,Pointcut定义由两部分组成: Pointcut表达式(expression )和Pointcut签名(signature )
//Pointcut表达式@pointcut((execution ) com.savage.AOP.messagesender.* () ) )//Point为private void log ) )
@before(execution ) com.savage.AOP.message sender.* (…) ) )如果定义了Pointcut,则为| |! 这三个运算
@pointcut(execution ) com.savage.AOP.messagesender.* )…) ) private void logSender ) }{}@pointcut ) exage
在此示例中,logMessage ) )与消息发送器和消息接收器方法之一匹配。
也可以将公共Pointcut放入类中,以便在整个APP应用程序中使用,如下所示:
package com.savage.aop; importorg.AspectJ.lang.annotation.*; public class pointcuts { @ pointcut (execution ) **message )…) public void logMessage ) {}@pointcut ) execution publicvon
如果要使用上面定义的Pointcut,请指定完整的类名和Pointcut签名,如下所示:
package com.savage.aop; importorg.AspectJ.lang.join point; importorg.AspectJ.lang.annotation.*; @ aspectpublicclasslogbeforeadvice (@ before ) com.sa gage.AOP.pointcuts.log message () (publicvoidbefore ) join pointe 记录缓冲区’ join point.get signature ().getName ) ); }
基于XML Sechma实现Advice时,如果需要重用Pointcut,请使用AOP : Pointcut/AOP 3360 Pointcut声明Pointcut,并在需要使用此pointcut的地方使用pointcut
AOP : config AOP 3360 pointcut id=’ log ‘ expression=’ execution (* com.savage.simplespring.bean.message sender.* )是AOP : aspect id=’ logging ‘ ref=’ logbeforeadvice ‘ AOP 3360 before pointcut-ref=’ log ‘ method=’ before ‘/AOP 3366
另外,除了execution式以外,还有within、this、target、args等Pointcut式