Spring AOP切点(pointcut)表达式
原文地址:http://www.baeldung.com/spring-aop-pointcut-tutorial
#概括
这遍文章将介绍Spring AOP切点表达式(下称表达式)语言,首先介绍两个面向切面编程中使用到的术语。
1.连接点(Joint Point):广义上来讲,方法、异常处理块、字段这些程序调用过程中可以抽像成一个执行步骤(或者说执行点)的单元。从Spring AOP来讲,就是指java的方法和异常处理代码块。
2.切点(Pointcut):是连接点的描述定义,Spring AOP通过切点来定位到哪些连接点。切点表达式语言就是切点用来定义连接点的语法。
#用例
表达式会出现在以下几种场景 *作为@Pointcut的参数,用以定义连接点
@Pointcut("within(@org.springframework.stereotype.Repository *)")
public void repositoryClassMethods() {}在上面的代码片段中的注解@Pointcut的参数”within(@org.springframework.stereotype.Reposity *)”就是使用的切点表达式。而上代码中的repositoryClassMethods()方法被AOP AspectJ定义为切点签名方法,作用是使得通知的注解可以通过这个切点签名方法连接到切点,通过解释切点表达式找到需要被切入的连接点。最终的目的都是为了找到需要被切入的连接点。像下面这段代码片段
@Around("repositoryClassMethods()")
public Object measureMethodExecutionTime(ProceedingJoinPoint pjp) throws Throwable {
...
}*如果你的项目是基于xml配置的,可以在
<aop:config>
<aop:pointcut id="anyDaoMethod"
expression="@target(org.springframework.stereotype.Repository)"/>
</aop:config>#切点指示符
切点指示符是切点定义的关键字,切点表达式以切点指示符开始。开发人员使切点指示符来告诉切点将要匹配什么,有以下9种切点指示符:execution、within、this、target、args、@target、@args、@within、@annotation,下面一一介结这9种切点指示符。
#execution
execution是一种使用频率比较高比较主要的一种切点指示符,用来匹配方法签名,方法签名使用全限定名,包括访问修饰符(public/private/protected)、返回类型,包名、类名、方法名、参数,其中返回类型,包名,类名,方法,参数是必须的,如下面代码片段所示: