Java的Spring AOP詳細講解
什麼是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自動代理
測試
註解通知類型和切面表達式的抽取
類型
抽取表達式
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Aspectj與Spring AOP的對比分析
- Java面試題沖刺第八天–Spring框架2
- Spring中AOP概念與兩種動態代理模式原理詳解
- Spring基礎之AOP的概念介紹
- 詳細解讀Java Spring AOP