AOP 面向切面程式設計

2021-09-23 15:41:57 字數 1560 閱讀 5370

aop(aspect oriented programming),即面向切面程式設計,可以說是oop(object oriented programming),物件導向程式設計的補充和完善。

面向切面程式設計是物件導向中的一種方式而已。在**執行過程中,動態嵌入其他**,叫做面向切面程式設計。常見的使用場景:

日誌事物

資料庫操作

面向切面程式設計,就是將交叉業務邏輯封裝成切面,利用aop的功能將切面織入到主業務邏輯中。所謂交叉業務邏輯是指,通用的,與主業務邏輯無關的**,如安全檢查,事物,日誌等。若不使用aop,則會出現**糾纏,即交叉業務邏輯與主業務邏輯混合在一起。這樣,會使業務邏輯變得混雜不清。

舉個例子:銀行系統取款會有乙個流程查詢也會有乙個流程

這兩者,都有乙個相同的驗證使用者的流程

這個時候 aop 就可以來幫我們簡化**了,首先,寫**的時候可以不寫這個驗證使用者的步驟,即完全不考慮驗證使用者,寫完之後,在另外乙個地方,寫好驗證使用者的**,然後告訴 spring 你要把這一段**加到哪幾個地方,spring就會幫你加過去,這裡還只是兩個地方,如果有多個控制流,這樣寫**會大大節約時間。

而且 aop 不會把**加到原始檔裡,但是它會正確的影響最終的機器**。

上面那個 驗證使用者 的方框,我們可以把它當成一塊板子,在這塊板子上插入一些控制流程,這塊板子就可以當成是 aop 中的乙個切面。所以 aop 的本質是在一系列的縱向的控制流程中,把那些相同的子流程提取成乙個橫向的面,把縱向流程畫成一條直線,而 aop 相當於把相同的地方連起來了

再來一幅圖理解一下:

這個驗證使用者的子流程 就成了一條直線,也可以理解成乙個切面,這裡只插了三個流程,如果其他流程也需要這個子流程,也可以插到其他地方去。

術語說明

切面切面泛指交叉業務邏輯。比如事物處理,日誌處理就可以理解為切面。常用的切面有通知與顧問。實際就是對主業務邏輯的一種增強

織入織入是指將切面**插入到目標物件的過程

連線點連線點指切面可以織入的位置

切入點切入點指切面具體織入的位置

通知通知(advice)是切面的一種實現,可以完成簡單織入功能(織入功能就是在這裡完成的)。通知定義了增強**切入到目標**的時間點,是目標方法執行之前執行,還是之後執行等。通知型別不同,切入時間不同。

顧問顧問(advisor)是切面的另一種實現,能夠將通知以更為複雜的方式織入到目標物件中,是將通知包裝為更複雜切面的裝配器。不僅指定了切入時間點,還可以指定具體的切入點。

通知型別

說明前置通知(methodbeforeadvice)

目標方法執行之前呼叫

後置通知(afterreturningadvice)

目標方法執行完成之後呼叫

環繞通知(methodinterceptor)

目標方法執行前後都會呼叫方法,且能增強結果

異常處理通知(throwsadvice)

目標方法出現異常呼叫

aop 面向切面程式設計

起源 研究人員就對物件導向思想的侷限性進行了分析。他們研究出了一種新的程式設計思想,借助這一思想或許可以通過減少 重複模組從而幫助開發人員提高工作效率。隨著研究的逐漸深入,aop也逐漸發展成一套完整的程式設計思想,各種應用aop的技術也應運而生。aop思想 定義乙個切面,在切面的縱向定義處理方法,處...

AOP面向切面程式設計

1 概念 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop是oop的延續,利用aop可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率 2 作用 1.解耦,將通用性的功能模組 與業務 解耦 ioc專...

AOP面向切面程式設計

1 連線點 joinpoint 程式執行的某個特定位置 如方法呼叫前後,方法丟擲異常後 乙個類或一段程式 擁有一些具有邊界性質的連線點。2 切點 pointcut 切點相當於查詢條件,乙個切點可以匹配多個連線點,如下所示,即用到了reviewlist這個註解的都符合條件。pointcut annot...