1. 程式人生 > >spring aop呼叫joinPoint.proceed方法執行了兩次的原因

spring aop呼叫joinPoint.proceed方法執行了兩次的原因

通過DeBug模式追查問題和問了度娘之後,整理解決方法如下:

1、多餘地使用了invoke呼叫方法

在方法中呼叫 joinPoint.proceed() 方法時,會執行兩次。因為除開你在本方法中執行的一次之外,spring會在方法也會執行一次.所以應該改用@XXXReturning等方法,如@After改成@AfterReturning:

@AfterReturning(value = "execution(* *(..)) && @annotation(log)",returning = "result")// 指定攔截被LogAnnotation註解的方法
public void afterLog(JoinPoint point, LogAnnotation log,Object result) {}

Object result即是方法的執行結果

2、使用了多餘的標籤
比如,切面類的註解,如果包含@Component會導致執行兩次:
@Aspect
@Order(0)
@Component

不過@Component如果作為自動裝配bean的存在,去掉顯然不合適(解決參考方法一)。

3、使用的是@Around方式
@Befor方法前執行一次
@Around方法前後各執行一次(相當於@Befor和@After一起使用)
@After方法後執行一次