1. 程式人生 > >Spring面向切面程式設計——什麼是面向切面程式設計

Spring面向切面程式設計——什麼是面向切面程式設計

   在軟體開發中,散佈於應用多處的功能被稱為橫切關注點(cross-cutting concern)。通常來講,這些橫切關注點從概念上是與應用的業務邏輯相分離的。把這些橫切關注點與業務邏輯相分離正是面向切面程式設計(AOP)所要解決的問題。

DI有助於應用物件之間的解耦,而AOP可以實現橫切關注點與它們所影響的物件之間的解耦。   

   簡而言之,橫切關注點可以被描述為影響應用多處的功能。

什麼是面向切面程式設計

橫切關注點可以被模組化為特殊的類,這些類被稱為切面(aspect)。這樣做有兩個好處:首先,現在每個關注點都集中在一個地方,而不是分散到多處程式碼中;其次,服務模組更簡潔,因為它們只包含主要的關注點(或核心功能)的程式碼,而次要關注點的程式碼被轉移到切面中了

在不改變原來程式碼的基礎上,增加新的功能。

AOP的優點

1.使真實角色處理的業務更加的純粹,不再去關注一些公共的事情。

2.公共的業務由代理來完成,—— 實現業務的分離。

3.公共業務發生改變時,變得更加集中和方便。

AOP術語

通知(advice)

   在AOP術語中,切面的工作被稱為通知。通知定義了切面是什麼以及何時使用。除了描述切面要完成的工作,通知還解決了何時執行這個工作的問題。它應該應用在某個方法被呼叫之前?之後?之前之後都呼叫?還是隻在方法丟擲異常時呼叫?

連線點(join point)

   連線點時在應用執行過程中能夠插入切面的一個點。這個點可以是呼叫方法時,丟擲異常時,甚至是修改一個欄位時。切面程式碼可以利用這些點插入到應用的正常流程之中,並新增新的行為。

切點(point):

   一個切面並不需要通知應用的所有連線點。切點有助於縮小切面所通知的連線點的範圍。

   如果說通知定義了切面的“什麼”和“何時”的話,那麼切點就定義了“何地”。切點的定義會匹配通知所要織入的一個或多個連線點。我們通常使用明確的類和方法名稱,或是利用正則表示式定義所匹配的類和方法名稱來指定這些切點。

切面(aspect)

   切面是通知和切點的結合。通知和切點共同定義了切面的全部內容——它是什麼,在何時和何處完成其功能。

引入(introduction):

   引入允許我們向現有的類新增新方法或屬性。

織入(weaving):

   織入是把切面應用到目標物件並建立新的代理物件的過程

。切面在指定的連線點被織入到目標物件中。在目標物件的宣告週期裡有多個點可以進行織入:編譯期,類載入期,執行期

總結

   通知包含了需要用於多個應用物件的橫切行為;連線點是程式執行過程中能夠應用通知的所有點;切點定義了通知被應用的具體位置(在哪些連線點)。其中關鍵的概念是切點定義了哪些連線點會得到通知。

AOP的重要性

   Spring aop 就是將公共業務(事務,安全等)和其它的業務結合。當執行其它業務時會把公共業務加進來,實現公共業務的重複利用,其它業務變得更加純粹,程式設計師只關心其它業務,其本質還是動態代理


可以加我微信一起學習