標籤:動態代理 出現 方法調用 err ima spec ring point 組成
AOP aspect oriented programing. 面向切面的編程.
編程中會遇到很多在代碼中具有橫向邏輯的代碼, 比如log, 比如效能檢測等代碼, 這些代碼將實際的商務邏輯程式碼封裝含在裡面, 很難做到縱向的抽離這些重複的橫向邏輯代碼. 所以引入了AOP的概念.
1. AOP的術語介紹1.1 連接點
指的是程式中實際的商務邏輯的類, 這些類初始化前後,類的某個方法調用前後, 出現異常後等這些, 所在的特定的位置被稱為連接點.
AOP就是找到這些連接點並進行織入性增強.
連接點由兩個資訊確定: 1. 方法表示的執行點, 2. 相對點表示的方位.
1.2 切點
AOP通過切點定位連接點, 一個切點可以匹配多個連接點. 切點通過org.springframework.aop.pointcut介面進行描述, 作為類和方法的連接點的查詢條件.
1.3 增強
增強是織入到目標類的連接點上的一段程式碼. 增強介面都是帶方位名的, BeforeAdvice, AfterRunningAdvice等.
1.4 目標對象
即為商務邏輯對象
1.5 引介
一種特殊的增強. 為類添加屬性和方法, 實現沒有實現的介面.
1.6 織入
織入是將增強添加到目標類具體連接點上的一個過程.
有三種織入方式, 1. 編譯期間織入(要求特殊的編譯器). 2. 類裝載期間織入(要求特殊的類裝載器). 3.動態代理織入(在運行期間為目標類添加增強產生子類的方式.)
Spring使用3.動態代理織入. AspectJ使用1.2.
1.7 代理
一個類被AOP織入增強後, 就產出一個結果類, 是融合了原來類和增強邏輯的代理類. 根據不同的代理方式, 代理類可能是原來類具有相同介面的類, 也可以是原來類的子類, 所以可以採用與調用原來類相同的方式調用代理類.
1.8 Aspect切面.
切面由切點和增強組成. 包括了橫切路基的定義. 也包括了連接點的定義. Spring AOP就是負責實施切面的架構. 將切面定義的橫切邏輯織入切面指定的連結點當中.
所以AOP的工作重心在於如何將增強應用於目標類的連接點上. 主要包括兩個工作: 1. 如何通過切點和增強定位到連接點. 2. 如何在增強中編寫切面的代碼.
Java spring -- AOP