AOP的五種通知

2021-08-20 05:31:34 字數 2142 閱讀 7674

- 切入點表示式語法:[修飾符] 返回型別 包名.類名.方法名(形式引數)

- 常見寫法:

execution(public * *(..))                                   所有的public方法  

execution(* set*(..)) 所有set開頭的方法

execution(* com.xyz.service.accountservice.*(..)) accountservice類中的所有方法

execution(* com.xyz.service.*.*(..)) com.xyz.service包下所有的方法

execution(* com.xyz.service..*.*(..)) · com.xyz.service包及其子包下所有的方法

應用:許可權控制(許可權不足丟擲異常)、記錄方法呼叫資訊日誌

切面類中的增強方法

/**

* 前置通知方法 應用場景: 許可權控制 (許可權不足,丟擲異常)、 記錄方法呼叫資訊日誌

* joinpoint:連線點,指的是被增強的那個方法

*/public void before(joinpoint joinpoint)

}

方法

/**

* 後置通知方法

* 應用場景: atm取款機取款後,自動下發簡訊

* 引數result:被增強那個方法的返回值

*/public void afterreturning(joinpoint joinpoint,object result)

}

特點 :目標方法執行前後,都進行增強(控制目標方法執行)

應用 :日誌、快取、許可權、效能監控、事務管理

增強**的方法要求:

- 接收的引數:proceedingjoinpoint(可執行的連線點)

- 返回值: object返回值

- 丟擲throwable異常

/*** 環繞通知方法

* 應用場景:事務處理

* @param proceedingjoinpoint 正在執行的連線點

*/public object around(proceedingjoinpoint proceedingjoinpoint) catch (throwable e)

//返回目標方法的返回值

return result;

}}

作用:目標**出現異常,通知執行。記錄異常日誌、通知管理員(簡訊、郵件)

應用場景:處理異常(一般不可預知),記錄日誌

/** * @param joinpoint

* @param ex 目標方法丟擲的異常 要與配置檔案命名一致

*/public void afterthrowing(joinpoint joinpoint, throwable ex)

作用:不管目標方法是否發生異常,最終通知都會執行(類似於finally**功能)

應用場景:釋放資源 (關閉檔案、 關閉資料庫連線、 網路連線、 釋放記憶體物件 )

public void after(joinpoint joinpoint)

注意,最終通知和後置通知的區別:最終通知,不管異常與否,都執行;而後置通知在異常時不執行。

AOP學習之五種通知

spring aop通知 advice 分成五類 前置通知before advice 在連線點前面執行,前置通知不會影響連線點的執行,除非此處丟擲異常。正常返回通知after returning advice 在連線點正常執行完成後執行,如果連線點丟擲異常,則不會執行。異常返回通知after thr...

五種通知方式來實現aop

1.前置通知,在業務方法之前執行 before advice 2.後置通知,在業務防止後執行 3.環繞通知,同時在業務方法的前後執行 around advice 4.最終通知,可以拿到業務的返回值 5.異常通知,可以捕獲業務方法中的異常物件 after throwing advice 加粗樣式 注意...

spring aop五種通知

before 前置通知 宣告該方法為方法執行之前的通知 宣告該方法是乙個前置通知 before execution public int com.spring.spring.impl.aitihmeticcalculator.add int,int public void beforemethod ...