?

基于AOP的異常處理研究與應用

2014-10-21 19:57趙文杰
計算機光盤軟件與應用 2014年24期

摘 要:異常處理是任何軟件中都必須面對的一類問題,但傳統的異常處理過程會和程序中的其它代碼產生了一種緊耦合關系,這種緊耦合關系使得代碼的重用和維護非常困難。本文將結合面向方面編程討論基于AOP的異常處理模型,該模型能夠比較好的實現異常處理代碼和業務邏輯代碼的解耦,大大提高整個程序的重用性和可維護性。

關鍵詞:異常處理;面向方面編程;AOP

中圖分類號:TP311.52

對異常的處理是任何軟件都必須面對的一類問題,然而傳統的異常處理方式會使得負責異常處理的代碼彌散在整個程序中,形成一種和其它代碼的緊耦合,這種緊耦合使得程序的可維護性和可重用性非常差,同時也會干擾正常的業務邏輯,不利于異常這類問題的集中處理。本文結合目前比較流行的面向方面編程,給出一種基于AOP的集中式異常處理模型,該模型可以很好的實現異常處理和其它代碼的分離解耦。這使程序員在編程之初可以更加專注于業務邏輯的處理而無須分心去處理異常,對異常的處理可以在隨后進行集中化處理并通過AOP的織入功能加入到程序中來。這大大增強了整個程序的可維護性和可重用性,也使我們的程序代碼看起來會更加干凈、結構清晰。

1 面向方面編程

面向方面編程(Aspect Oriented Programming)是對面向對象編程的進一步補充,它可以將散布在程序中的不相關對象中的一些相同邏輯抽取出來模塊化,從而進一步提高了程序的重用性和可維護性。AOP能夠將那些與業務無關,卻為業務模塊所共同調用的邏輯,例如:事務處理、日志管理、權限控制、異常處理、調試等模塊化,以降低模塊之間的耦合度,減少重復代碼的出現。

1.1 AOP基本概念[1]

方面(Aspect):對橫切性關注點的模塊化,是我們從業務模塊中抽取出來的一類相似邏輯的模塊化。

連接點(Joinpoint):是橫切性邏輯的觸發點,可以是類的初始化、某方法的調用、特定異常的拋出。

通知(Advice):在特定的連接點,AOP框架執行的動作。通知的類型[2]包含:“around”、“before”、“after throwing”、“after returning”等,用于定義執行動作在什么時機觸發。

切入點(Pointcut):一個通知被觸發的一系列連接點的集合。

目標對象(Target Object):包含連接點的對象,是業務邏輯對象。

AOP代理對象(AOP Proxy):AOP框架創建目標對象的代理象,通過代理對象對目標對象的功能進行增強,將方面應用到目標對象。

織入(Weaving):AOP框架創建AOP代理對象的過程,它將我們橫切性關注點融入到當前系統中,擴展系統的功能。

AOP可以降低模塊的耦合度,使系統更易擴展,增強代碼的復用性,還可以實現橫切性問題的遲綁定。

2 基于AOP的異常處理模型

圖1中給出的是一個使用AOP的異常處理模型。該異常處理模型中,Client為調用業務邏輯對象的客戶端,Target為提供服務的業務邏輯對象,ExAspect為處理異常的方面(Aspect),ExceptionHandler負責在截獲異常后對異常進行處理,可以是對異常情況的記錄、發送通知等。在未使用AOP之前Client將會直接對Target進行調用,異常處理代碼則被交織在業務邏輯代碼中,而在AOP異常處理模型中,Target被一個AOP代理對象所代理,AOP代理對象在調用Target之后捕捉異常,并對捕捉到的異常進行處理,異常處理代碼則被模塊化入ExceptionHandler處理。這種方法實現了異常處理代碼和正常業務邏輯代碼的分離解耦,增強了代碼的復用性和可擴展性。

下面我們以JAVA和Spring2.5為例,給出其程序代碼和配置的基本實現方式。

配置中定義了切面pointcut1為com.test.service包下的所有對象方法的執行,定義了after-rhrowing類型的通知,當切面中的連接點執行并有異常拋出時會觸發ExAspect中doThrowing方法的執行,在doThrowing方法中我們調用ExceptionHandler模塊對異常進行處理。使用過程中AOP代理的創建則由框架完成,這個過程在AOP中叫織入(weaving)。

注意在Aspectj和Spring中after-throwing類型的通知在處理后會繼續把異常向上拋,如果想對異常類型進行轉換或屏蔽,則可以使用around通知類型。

3 結束語

本文研究了AOP技術在異常處理上的應用,并給出了一種實現模型。AOP技術的引入改變了傳統的異常處理方式,使得異常處理代碼和正常業務邏輯代碼實現了解耦,增強了代碼的復用性、可維護性、及程序可擴展性,AOP技術的引入還使得我們可以做到異常處理代碼的延長實現,這樣在前期可以不用過多的考慮異常處理的問題,從而可以把主要精力集中在業務邏輯的實現上。

參考文獻:

[1]Rod Johnson. Spring2.5參考手冊.譯者:丁雪豐等,譯.Spring中文論壇,2008:105-149.

[2]The AspectJTM Programming Guide[EB/OL].http://www.eclipse.org/aspectj/doc/released/progguide/index.html,2003/2015.1

作者簡介:趙文杰(1979-),男,河南安陽人,漢族,助理工程師,碩士研究生,研究方向:軟件工程。

作者單位:濮陽市安陽地區醫院 計算機中心,河南安陽 455000

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合