spring aop呼叫joinPoint.proceed方法執行了兩次的原因
阿新 • • 發佈:2019-01-27
通過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方法後執行一次