javascript
Spring5参考指南:SpringAOP简介
文章目錄
- AOP的概念
- Spring AOP簡介
- Spring AOP通知類型
寫過程序的都知道OOP即面向對象編程。
從最開始的面向過程編程,到后面的面向對象編程,程序的編寫方式發生了重大的變化,面向對象編程將業務邏輯封裝成一個一個的對象,所有的操作都轉換為對對象的操作。
面向對象編程現在使用的非常普遍,一般來說只要是高級語言都支持,但是它也有缺點,比如如果我們想做一些橫跨對象的操作(如統計各個對象里面某個方法的執行時間),這時候面向對象可以能力有不逮。我們可能需要在每個對象里面都添加一些統計時間的代碼,那么有沒有更好的方法來處理這個問題呢?
面向方面編程(AOP)通過提供對程序結構的另一種思考方式來補充面向對象編程(OOP)。OOP中模塊化的關鍵單元是類,而AOP中模塊化的單元是方面。方面支持跨多個類型和對象的關注點(如事務管理)的模塊化。(在AOP文獻中,這種關注通常被稱為“橫切”關注。)
AOP的概念
AOP的英文全稱是Aspect-oriented Programming (AOP) 。面向方面的編程。它有如下幾個概念:
-
方面(Aspect):跨越多個類的模塊化關注點。事務管理是企業Java應用程序中橫切關注點的一個很好的例子。在SpringAOP中,方面是通過使用常規類(基于模式的方法)或使用@Aspect注解(@Aspectj樣式)注解的常規類來實現的。
-
連接點(Join point):程序執行過程中的一點,如方法的執行或異常的處理。在SpringAOP中,連接點總是表示一個方法執行。
-
通知(Advice):一個方面在特定連接點采取的行動。不同類型的通知包括“環繞”、“前“和”后”通知。許多AOP框架(包括Spring)將通知建模為攔截器,并在連接點周圍維護攔截器鏈。
-
切點(Pointcut):與連接點匹配的謂詞。通知與切入點表達式關聯,并在與切入點匹配的任何連接點上運行(例如,使用特定名稱執行方法)。pointcut表達式匹配的連接點概念是AOP的核心,Spring默認使用AspectJ pointcut表達式語言。
-
說明(Introduction):代表類型聲明其他方法或字段。SpringAOP允許您向任何advised對象引入新的接口(和相應的實現)。例如,您可以使用一個Introduction使bean實現一個IsModified接口,以簡化緩存。(introduction在AspectJ社區中稱為類型間聲明。)
-
目標對象(Target object):由一個或多個方面advised的對象。也稱為“advised 對象”。因為SpringAOP是通過使用運行時代理實現的,所以這個對象始終是一個代理對象。
-
AOP代理:由AOP框架創建的用于實現aspect contracts(通知方法執行等)的對象。在Spring框架中,AOP代理是JDK動態代理或CGLIB代理。
-
編織(Weaving):將aspects與其他應用程序類型或對象鏈接,以創建advised的對象。這可以在編譯時(例如,使用AspectJ編譯器)、加載時或運行時完成。Spring AOP和其他純Java AOP框架一樣,在運行時進行編織。
Spring AOP簡介
Spring AOP是純Java實現的。不需要特殊的編譯過程。
SpringAOP目前只支持方法上面的連接點,并沒有實現字段連接。如果要實現這樣的功能可以考慮使用AspectJ。
面向方面的集大成者是AspectJ, 它提供了面向方面編程的非常全面的功能,SpringAOP從未試圖與AspectJ競爭,以提供全面的AOP解決方案。我們相信,基于代理的框架(如SpringAOP)和全面的框架(如AspectJ)都是有價值的,它們是互補的,而不是競爭中的。Spring無縫地將SpringAOP和IOC與AspectJ集成在一起。
SpringAOP的AOP方法不同于大多數其他AOP框架。目的并不是提供最完整的AOP實現。相反,其目的是在AOP實現和SpringIOC之間提供緊密的集成,以幫助解決企業應用程序中的常見問題。
Spring AOP通知類型
Spring AOP包含以下幾種通知類型:
- Before advice:在連接點之前運行但不能阻止執行到連接點的通知(除非它拋出異常)。
- After returning advice:在連接點正常完成后要運行的通知(例如,如果方法返回并且不引發異常)。
- After throwing advice: 如果方法通過引發異常而退出,則要執行的通知。
- After (finally) advice:無論連接點退出的方式如何(正常或異常返回),都要執行的通知。
- Around advice:環繞連接點(如方法調用)的通知。這是最有力的通知。around通知可以在方法調用前后執行自定義行為。它還負責通過返回自己的返回值或引發異常來選擇是繼續到連接點還是快捷地執行通知的方法。
最常使用的是Around advice,他的功能也最強大。他可以實現其他advice的功能,但是我們建議使用功能最小的通知類型,因為這樣的模型更加簡單,并減少你的編寫程序出錯幾率。
更多教程請參考 flydean的博客
總結
以上是生活随笔為你收集整理的Spring5参考指南:SpringAOP简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring5参考指南: SpEL
- 下一篇: Spring5参考指南:基于Schema