關於AOP、之前我已寫過一個系列的隨筆: 《自己實現簡單的AOP》,它的關註點在於實現、實現語言是C#,實現方式為 自定義實現RealProxy 抽象類、重寫Invoke方法,以便進行方法調用的攔截、藉此實現AOP。感興趣的園友可以去瞅瞅。 今天、我們來看一下Spring中的AOP,本隨筆著重...
關於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 就是這麼簡單》讀書筆記、並附加作者自己的認知。
(未完待續...)