Spring-33-Advice通知类型
- @Before 前置通知
- @After 后置通知
- @Around 环绕通知
- @AfterReturning 返回后通知
- @AfterThrowing 异常抛出后通知
重点:@Around 环绕通知
-
环绕通知中需要一个 ProceedingJoinPoint 类作为参数,调用此类中的 proceed() 方法才能对原始方法进行调用,否则将不执行原始方法
-
当原始方法有返回值时,通常将环绕通知的方法返回类型设置为 Object,调用 proceed() 获得原始返回值,再将其返回
-
当原始方法无返回值时,也可以将环绕通知的返回类型设置为 Object
-
环绕通知中可以循环调用多次 proceed() 方法,而只需要返回一次
-
由于无法预知原始方法是否会抛出异常,因此环绕通知方法必须抛出 Throwable 对象
// 示例:将原始方法循环调用 10000 次计算耗时
@Around("pt()")
public Object aroundMethod(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object res = null;
for (int i = 0; i < 10000; i ++)
res = pjp.proceed();
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start) + " ms");
return res;
}