概念:
AOP——面向切面程式設計,通過預編譯/動態代理實現程式功能的統一維護
主要功能是:日誌、效能統計、安全控制、事務處理、異常處理
實現方式
- 預編譯——AspectJ
- 動態代理——SpringAOP、JbossAOP
常用概念
- Advice通知的型別
Spring的AOP實現
- 純Java實現,無需特殊編譯,不需要控制類載入器
- 只支援方法執行連線點
- 目的是提供一種APO與SpringIOC之間的整合
- 與AspectJ相比,SpringAOP並不全面
有介面和無介面的SpringAOP的區別(沒看懂)
- 有介面,預設使用標準JavaSErvice動態代理作為AOP代理
- 無介面使用CGLIB代理
配置、切面實現、切入點,切入方式
Demo:
首先需要增加依賴包
在Spring.xml中配置切面
切入點
切面實現
帶參切入方法實現
測試類
帶參切入點測試結果
Introductions引入
- 簡介允許一個切面宣告一個實現指定介面的通知物件,並且提供了一個介面實現來代表這些物件
- 由 aop:aspect 中的 aop:declare-parents 元素宣告該元素用於宣告所匹配的型別擁有一個新的parent
例如:有個Service提供server服務,想在不更改Service程式碼的前提下對該Service增加驗證,即可以定義一個介面和實現,再通過Introductions為Service增加新的介面,使Service可以通過驗證後再執行server
Demo:
宣告一個介面,並提供實現
想要引入的類
配置
Test方法
執行結果
advisor
- 就像一個小的自包含的方面,只有一個advice
- 切面自身通過一個bean表示,並且必須實現某個advice介面,同事,advisor也可以很好的利用AspectJ的切入點表示式
- Spring通過配置檔案中的aop:advisor 元素支援advisor 實際使用中大多數情況下他會和transactional advice配合使用
- 為了定義一個advisor的優先順序以便讓advice可以有序,可以使用order屬性來定義advisor的順序
例如:該標籤只是切入的另一種方式,只需要配置切入點和實現了通知介面的類即可實現切面
Demo:
配置
實現了Advice介面的實現類
切入點測試呼叫方法
測試
結果