???????? AOP這個概念提出來很久了,可對它總是一知半解。這幾天好好補(bǔ)了一下其中的知識,終于有所突破。
???????? 簡單的來說,AOP就是面向方面(aspect)編程。具體的概念是這樣的:
???????? 面向 Aspect 的編程(AOP)是一種新的編程技術(shù),它允許程序員對
橫切關(guān)系(crosscutting concerns)(跨越典型職責(zé)界限的行為,例如日志記錄)進(jìn)行模塊化。AOP 引進(jìn)了
Aspect,它將影響多個類的行為封裝到一個可重用模塊中。
???????? 那
什么是橫切??
??????? 橫切 是面向方面編程的專有名詞。它指的是在一個給定的編程模型中穿越既定的職責(zé)部分(比如日志記錄和性能優(yōu)化)的操作。在橫切的世界里,橫切有兩種類型:動態(tài)橫切和靜態(tài)橫切。
???????
動態(tài)橫切
?????? 動態(tài)橫切 是通過
切入點(diǎn) 和
連接點(diǎn) 在一個
方面 中創(chuàng)建行為的過程,連接點(diǎn)可以在執(zhí)行時橫向地應(yīng)用于現(xiàn)有對象。動態(tài)橫切通常用于幫助向?qū)ο髮哟沃械母鞣N方法添加日志記錄或身份認(rèn)證。下面讓我們花點(diǎn)時間了解一下動態(tài)橫切中的一些實(shí)際概念:
- 方面(aspect)類似于 Java 編程語言中的類。方面定義切入點(diǎn)和通知(advice),并由諸如 AspectJ 這樣的方面編譯器來編譯,以便將橫切(包括動態(tài)的和靜態(tài)的)織入(interweave)現(xiàn)有的對象中。
- 一個 連接點(diǎn)(join point) 是程序執(zhí)行中一個精確執(zhí)行點(diǎn),比如類中的一個方法。例如,對象
Foo
中的方法 bar()
就可以是一個連接點(diǎn)。 連接點(diǎn)是個抽象的概念;不用主動定義一個連接點(diǎn)。
- 一個 切入點(diǎn)(pointcut) 本質(zhì)上一個用于捕捉連接點(diǎn)的結(jié)構(gòu)。例如,可以定義一個切入點(diǎn)來捕捉對對象
Foo
中的方法 bar()
的所有調(diào)用。和連接點(diǎn)相反,切入點(diǎn)需要在方面中定義。
- 通知(advice) 是切入點(diǎn)的可執(zhí)行代碼。一個經(jīng)常定義的通知是添加日志記錄功能,其中切入點(diǎn)捕捉對對象
Foo
中的 bar()
的每個調(diào)用,然后該通知動態(tài)地插入一些日志記錄功能,比如捕捉 bar()
的參數(shù)。
?????? 這些概念是動態(tài)橫切的核心,雖然正如我們即將看到的,它們并不全都是靜態(tài)橫切所必需的。
?????? 靜態(tài)橫切
???? 靜態(tài)橫切 和動態(tài)橫切的區(qū)別在于它不修改一個給定對象的執(zhí)行行為。相反,它允許通過引入附加的方法字段和屬性來修改對象的 結(jié)構(gòu)。此外,靜態(tài)橫切可以把擴(kuò)展和實(shí)現(xiàn)附加到對象的基本結(jié)構(gòu)中。
??? 雖然現(xiàn)在還無法談及靜態(tài)橫切的普遍使用——它看起來是 AOP 的一個相對未被探索(盡管非常具有吸引力)的特性——然而這一技術(shù)蘊(yùn)含的潛力是巨大的。使用靜態(tài)橫切,架構(gòu)師和設(shè)計(jì)者能用一種真正面向?qū)ο蟮姆椒ㄓ行У亟?fù)雜系統(tǒng)的模型。靜態(tài)橫切允許您不用創(chuàng)建很深的層次結(jié)構(gòu),以一種本質(zhì)上更優(yōu)雅、更逼真于現(xiàn)實(shí)結(jié)構(gòu)的方式,插入跨越整個系統(tǒng)的公共行為。
??????
posted on 2006-09-06 20:05
布衣郎 閱讀(718)
評論(0) 編輯 收藏 所屬分類:
設(shè)計(jì)相關(guān) 、
aop