首頁 > 軟體

Java的Spring AOP詳細講解

2022-02-22 13:00:57

什麼是AOP&作用

  • AOP 為 Aspect Oriented Programming 的縮寫,意思為面向切面程式設計,是通過預編譯方式和執行期動態代理實現程式功能的統一維護的一種技術。
  • AOP 是 OOP 的延續,是函數語言程式設計的一種衍生範型。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率
  • 作用:在程式執行期間,在不修改原始碼的情況下對方法進行功能增強

AOP的動態代理技術

  • 常用的動態代理技術

1.JDK代理,基於介面的動態代理

2.cglib代理,基於父類別的動態代理技術

基於JDK的動態代理

動態代理的實現

單獨實現增強方法

running方法

cglib動態代理

不需要寫介面檔案其他增強方法,目標方法複製

AOP相關概念

Target(目標物件):代理的目標物件

Proxy (代理):一個類被 AOP 織入增強後,就產生一個結果代理類

Joinpoint(連線點):所謂連線點是指那些被攔截到的點。在spring中,這些點指的是方法,因為spring只支援方法型別的連線點

Pointcut(切入點):所謂切入點是指我們要對哪些 Joinpoint 進行攔截的定義

Advice(通知/ 增強):所謂通知是指攔截到 Joinpoint 之後所要做的事情就是通知

Aspect(切面):是切入點和通知(引介)的結合

Weaving(織入):是指把增強應用到目標物件來建立新的代理物件的過程。spring採用動態代理織入,而AspectJ採用編譯期織入和類裝載期織入

AOP開發明確事項

需要編寫的內容

  • 編寫業務核心程式碼(目標方法)
  • 編寫切面類(增強功能方法)
  • 在組態檔中。設定織入關係

AOP技術實現的內容

Spring 框架監控切入點方法的執行。一旦監控到切入點方法被執行,使用代理機制,動態建立目標物件的代理物件,根據通知類別,在代理物件的對應位置,將通知對應的功能織入,完成完整的程式碼邏輯執行。

AOP 底層使用哪種代理方式

在 spring 中,框架會根據目標類是否實現了介面來決定採用哪種動態代理的方式(jdk是介面代理 cglib是不需要介面的)

基於XML的AOP開發

匯入AOP相關座標

建立目標介面和目標類

建立切面類

將目標類和切面類的物件建立權交給Spring

在applicationContext.xml中設定織入關係

測試程式碼

切面表示式

  • 表示式語法

execution([修飾符] 返回值型別 包名.類名.方法名(引數))

execution(public void com.itheima.aop.Target.method())

存取修飾符可以省略

execution(void com.itheima.aop.Target.*(..))

包名與類名之間一個點 . 代表當前包下的類,兩個點 … 表示當前包及其子包下的類

execution(* com.itheima.aop.*.*(..))

參數列可以使用兩個點 … 表示任意個數,任意型別的參數列

execution(* com.itheima.aop..*.*(..))

通知型別

切點表示式抽取

基於註解的AOP開發

建立目標介面和目標類(內部有切點)

建立切面類(內部有增強方法)

將目標類和切面類的物件建立權交給Spring 在切面類中使用註解設定織入關係 在組態檔中開啟元件掃描和AOP自動代理

測試

註解通知型別和切面表示式的抽取

型別

抽取表示式

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!  


IT145.com E-mail:sddin#qq.com