spring aop 的一些记录

AOP

PointCut

切入点

用于匹配符合某些特征的方法.

JoinPoint

连接点

程序执行过程中的一个点,如方法的执行或异常的处理。在Spring AOP中,连接点总是表示方法执行。

advice

before

beofore

目标JoinPoint执行之前执行

afterReturing

目标JoinPoint正常执行返回.

afterThrowing

目标JoinPoint 执行时抛出异常

after(finnaly)

目标JoinPoint方法执行结束

around

需要手动的调用目标JoinPoint执行.

该通知的第一个参数是ProceedingJoinPoint类型.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.ProceedingJoinPoint;

@Aspect
public class AroundExample {

@Around("com.xyz.myapp.CommonPointcuts.businessService()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
// start stopwatch
Object retVal = pjp.proceed();
// stop stopwatch
return retVal;
}

}

访问当前JoinPoint

任何通知可以定义该方法的第一个参数类型为(org.aspectj.lang.JoinPoint)类型,除@around通知外

  • getArgs() 返回方法参数

  • getThis() 返回代理对象

  • getTarget 返回目标对象

  • getSignature() 返回被通知的方法的描述

  • toString() 打印被通知的方法的有用描述

传递参数给Advice

1
2
3
4
5

@Before("com.xyz.myapp.CommonPointcuts.dataAccessOperation() && args(account,..)")
public void validateAccount(Account account) {
// ...
}

Advice的顺序

从高到底

@Around, @Before, @After, @AfterReturning, @AfterThrowing