關於AOP、之前我已寫過一個系列的隨筆: 《自己實現簡單的AOP》,它的關注點在於實現、實現語言是C#,實現方式為 自定義實現 RealProxy 抽象類、重寫Invoke方法,以便進行方法呼叫的攔截、藉此實現AOP。感興趣的園友可以去瞅瞅。
今天、我們來看一下Spring中的AOP,本隨筆著重關注AOP術語。
先說一句廢話:如果你對AOP不是很熟悉、第一次看到這些術語可能會有點迷惑,不過沒有關係、堅持繼續向下看,然後再反過來看一遍,有些東西就能恍然大悟了。
連線點(Joinpoint)
連線點:連線點、點,它是一個位置、是指程式執行的特定位置,如:類初始化前、類初始化後、某個方法執行前、某個方法執行後、方法丟擲異常之後 等等位置。而,Spring僅支援 方法的連線點, 即僅可以在方法執行前、方法執行後、方法丟擲異常時 及 方法執行前後 4 類連線點。
我們都知道黑客攻擊系統都需要找到突破口,如果沒有突破口就沒法進行攻擊。在某種程度上來說、AOP有點像黑客(因為它要向程式中織入程式碼邏輯),而連線點就是這個突破口。
連線點需要由兩點資訊來確定:一個是 方法 。第二個是 相對於方法的執行方位(比如:方法執行“前”、方法執行“後”、方法執行“前後”、方法丟擲異常“時”)。【執行方位 存在於 增強中】
切點(Pointcut)
我(本隨筆作者)對切點的理解為,切點:查詢連線點的條件,更確切一點是查詢連線點所表示的方法的條件。
增強(Advice)
增強:即一段程式碼,是想要織入的程式碼邏輯。 並且還附帶了 相對於方法的執行方位。
因此:切點 + 增強中的 相對於方法的執行方位 = 連線點。
目標物件(Target)
是需要織入增強的目標類。
引介(Introduction)
引介:引介是一種特殊的增強:它可以為目標類增加屬性和方法,以此、可以實現新介面。
織入(Weaving)
織入:織入是將增強新增到目標類具體連線點上的過程,AOP就像一臺織布機,將目標類、增強或引介通過AOP這臺織布機天衣無縫地編織在一起。
代理(Proxy)
一個類被AOP織入增強後,就產生了一個結果類,這個結果類就是代理。它融合了原類和增強邏輯。代理類 和 原類 擁有相同的介面,所以可以像原類一樣呼叫代理類。
切面(Aspect)
切面由 切點 和 增強(或引介)組成,它既包括了橫切邏輯、也包含了連線點的定義,Spring AOP 就是負責實施切面的框架,它將切面所定義的橫切邏輯織入切面中所指定的連線點上。
AOP 的工作重心在於如何將增強應用於目標物件的連線點上。這裡包含兩個工作:
1、如何通過切點 和 增強 定位連線點。
2、如何在增強中編寫橫切邏輯程式碼。
本系列隨筆將重點圍繞破以上兩點來展開進行。
宣告:《Spring 3.0 AOP》 系列隨筆為《Spring 3.0 就是這麼簡單》讀書筆記、並附加作者自己的認知。
(未完待續...)