spring aop
aspect oriented programming(aop)從某種意義上說是對oop的補充,因為它還提供了模塊化的功能。但是模塊化的關鍵單元是方面而不是類。
aop將程序邏輯分為不同的部分(稱為關注點)。它用于通過 跨領域關注點來提高模塊化。
cross-cutting concerns是一個會影響整個應用程序的關注點,應該盡可能集中在一個位置的代碼中,例如事務管理,身份驗證,日志記錄,安全性等。
為什么使用aop?
它提供了一種可插拔的方式,可以在實際邏輯之前,之后或周圍動態添加附加關注點。假設一個類中有10個方法,如下所示:
class a{ public void m1(){...} public void m2(){...} public void m3(){...} public void m4(){...} public void m5(){...} public void n1(){...} public void n2(){...} public void p1(){...} public void p2(){...} public void p3(){...} }
從m開始有5種方法,從n開始有2種方法,從p開始有3種方法。
了解情況我必須維護日志并發送
沒有aop的問題我們可以從m開頭的方法中調用方法(維護日志并發送通知)。在這種情況下,我們需要使用所有5種方法編寫代碼。
但是,如果客戶以后說,我不必發送通知,則需要更改所有方法。這會導致維護問題。
aop解決方案我們不必從方法中調用方法。現在,我們可以在類的方法中定義其他關注點,例如維護日志,發送通知等。它的條目在xml文件中給出。
將來,如果客戶說要刪除通知程序功能,我們只需要在xml文件中進行更改。因此,在aop中維護很容易。
在哪里使用aop?
在以下情況下主要使用aop:
- 提供聲明式企業服務,例如聲明式事務管理。
- 它允許用戶實現自定義aspects。
aop概念和術語
aop概念和術語如下:
- join point
- advice
- pointcut
- introduction
- target object
- aspect
- interceptor
- aop proxy
- weaving
join point
join point是程序中的任何點,例如方法執行,異常處理,字段訪問等。spring僅支持方法執行join point。
advice
advice表示方面在特定的join point處采取的操作。有不同類型的advice:
- before advice: 它在join point之前執行。
- after returning advice: 在聯合點正常完成后執行。
- after throwing advice: 如果方法因引發異常而退出,則執行。
- after (finally) advice: 無論join point退出是正常返回還是異常返回,它都會在join point之后執行。
- around advice: 它在join point之前和之后執行。
pointcut
它是aop的一種表達語言,它與join point相匹配。
introduction
這意味著引入類型的其他方法和字段。它允許您向任何建議對象引入新的界面。
target object
這是一個或多個方面建議的對象。在spring,它也被稱為代理對象,因為spring aop是使用運行時代理實現的。
aspect
這是一個包含建議,join point等的類。
interceptor
這是一個僅包含一個建議的方面。
aop proxy
它用于實現由aop框架創建的方面合同。在spring框架中它將是jdk動態代理或cglib代理。
weaving
這是將方面與其他應用程序類型或對象鏈接在一起以創建建議對象的過程。編織可以在編譯時,加載時或運行時完成。 spring aop在運行時執行編織。
aop實現
aop實現由以下提供:
- aspectj
- springaop
- jboss aop
spring aop
spring aop可以通過以下三種方式使用。但是廣泛使用的方法是spring aspectj注釋樣式。下面給出了使用spring aop的3種方法:
- 采用spring1.2舊樣式(基于dtd)(在spring3中也受支持)
- 通過aspectj注釋樣式
- 通過spring xml配置樣式(基于模式)
spring aop示例 spring aop aspectj注解示例 spring aop aspectj xml配置示例