Spring面向切面程式設計——什麼是面向切面程式設計
在軟體開發中,散佈於應用多處的功能被稱為橫切關注點(cross-cutting concern)。通常來講,這些橫切關注點從概念上是與應用的業務邏輯相分離的。把這些橫切關注點與業務邏輯相分離正是面向切面程式設計(AOP)所要解決的問題。
DI有助於應用物件之間的解耦,而AOP可以實現橫切關注點與它們所影響的物件之間的解耦。
簡而言之,橫切關注點可以被描述為影響應用多處的功能。
什麼是面向切面程式設計
橫切關注點可以被模組化為特殊的類,這些類被稱為切面(aspect)。這樣做有兩個好處:首先,現在每個關注點都集中在一個地方,而不是分散到多處程式碼中;其次,服務模組更簡潔,因為它們只包含主要的關注點(或核心功能)的程式碼,而次要關注點的程式碼被轉移到切面中了
AOP的優點
1.使真實角色處理的業務更加的純粹,不再去關注一些公共的事情。
2.公共的業務由代理來完成,—— 實現業務的分離。
3.公共業務發生改變時,變得更加集中和方便。
AOP術語
通知(advice):
在AOP術語中,切面的工作被稱為通知。通知定義了切面是什麼以及何時使用。除了描述切面要完成的工作,通知還解決了何時執行這個工作的問題。它應該應用在某個方法被呼叫之前?之後?之前之後都呼叫?還是隻在方法丟擲異常時呼叫?
連線點(join point):
連線點時在應用執行過程中能夠插入切面的一個點。這個點可以是呼叫方法時,丟擲異常時,甚至是修改一個欄位時。切面程式碼可以利用這些點插入到應用的正常流程之中,並新增新的行為。
切點(point):
一個切面並不需要通知應用的所有連線點。切點有助於縮小切面所通知的連線點的範圍。
如果說通知定義了切面的“什麼”和“何時”的話,那麼切點就定義了“何地”。切點的定義會匹配通知所要織入的一個或多個連線點。我們通常使用明確的類和方法名稱,或是利用正則表示式定義所匹配的類和方法名稱來指定這些切點。
切面(aspect):
切面是通知和切點的結合。通知和切點共同定義了切面的全部內容——它是什麼,在何時和何處完成其功能。
引入(introduction):
引入允許我們向現有的類新增新方法或屬性。
織入(weaving):
織入是把切面應用到目標物件並建立新的代理物件的過程
總結:
通知包含了需要用於多個應用物件的橫切行為;連線點是程式執行過程中能夠應用通知的所有點;切點定義了通知被應用的具體位置(在哪些連線點)。其中關鍵的概念是切點定義了哪些連線點會得到通知。
AOP的重要性
Spring aop 就是將公共業務(事務,安全等)和其它的業務結合。當執行其它業務時會把公共業務加進來,實現公共業務的重複利用,其它業務變得更加純粹,程式設計師只關心其它業務,其本質還是動態代理
可以加我微信一起學習