国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于AOP的異常處理研究與應(yīng)用

2014-10-21 19:57:17趙文杰

摘 要:異常處理是任何軟件中都必須面對(duì)的一類問題,但傳統(tǒng)的異常處理過程會(huì)和程序中的其它代碼產(chǎn)生了一種緊耦合關(guān)系,這種緊耦合關(guān)系使得代碼的重用和維護(hù)非常困難。本文將結(jié)合面向方面編程討論基于AOP的異常處理模型,該模型能夠比較好的實(shí)現(xiàn)異常處理代碼和業(yè)務(wù)邏輯代碼的解耦,大大提高整個(gè)程序的重用性和可維護(hù)性。

關(guān)鍵詞:異常處理;面向方面編程;AOP

中圖分類號(hào):TP311.52

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

1 面向方面編程

面向方面編程(Aspect Oriented Programming)是對(duì)面向?qū)ο缶幊痰倪M(jìn)一步補(bǔ)充,它可以將散布在程序中的不相關(guān)對(duì)象中的一些相同邏輯抽取出來模塊化,從而進(jìn)一步提高了程序的重用性和可維護(hù)性。AOP能夠?qū)⒛切┡c業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯,例如:事務(wù)處理、日志管理、權(quán)限控制、異常處理、調(diào)試等模塊化,以降低模塊之間的耦合度,減少重復(fù)代碼的出現(xiàn)。

1.1 AOP基本概念[1]

方面(Aspect):對(duì)橫切性關(guān)注點(diǎn)的模塊化,是我們從業(yè)務(wù)模塊中抽取出來的一類相似邏輯的模塊化。

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

通知(Advice):在特定的連接點(diǎn),AOP框架執(zhí)行的動(dòng)作。通知的類型[2]包含:“around”、“before”、“after throwing”、“after returning”等,用于定義執(zhí)行動(dòng)作在什么時(shí)機(jī)觸發(fā)。

切入點(diǎn)(Pointcut):一個(gè)通知被觸發(fā)的一系列連接點(diǎn)的集合。

目標(biāo)對(duì)象(Target Object):包含連接點(diǎn)的對(duì)象,是業(yè)務(wù)邏輯對(duì)象。

AOP代理對(duì)象(AOP Proxy):AOP框架創(chuàng)建目標(biāo)對(duì)象的代理象,通過代理對(duì)象對(duì)目標(biāo)對(duì)象的功能進(jìn)行增強(qiáng),將方面應(yīng)用到目標(biāo)對(duì)象。

織入(Weaving):AOP框架創(chuàng)建AOP代理對(duì)象的過程,它將我們橫切性關(guān)注點(diǎn)融入到當(dāng)前系統(tǒng)中,擴(kuò)展系統(tǒng)的功能。

AOP可以降低模塊的耦合度,使系統(tǒng)更易擴(kuò)展,增強(qiáng)代碼的復(fù)用性,還可以實(shí)現(xiàn)橫切性問題的遲綁定。

2 基于AOP的異常處理模型

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

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

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

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

3 結(jié)束語

本文研究了AOP技術(shù)在異常處理上的應(yīng)用,并給出了一種實(shí)現(xiàn)模型。AOP技術(shù)的引入改變了傳統(tǒng)的異常處理方式,使得異常處理代碼和正常業(yè)務(wù)邏輯代碼實(shí)現(xiàn)了解耦,增強(qiáng)了代碼的復(fù)用性、可維護(hù)性、及程序可擴(kuò)展性,AOP技術(shù)的引入還使得我們可以做到異常處理代碼的延長(zhǎng)實(shí)現(xiàn),這樣在前期可以不用過多的考慮異常處理的問題,從而可以把主要精力集中在業(yè)務(wù)邏輯的實(shí)現(xiàn)上。

參考文獻(xiàn):

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

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

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

作者單位:濮陽市安陽地區(qū)醫(yī)院 計(jì)算機(jī)中心,河南安陽 455000

五大连池市| 双峰县| 定远县| 尤溪县| 朝阳县| 白朗县| 探索| 五莲县| 克拉玛依市| 建平县| 安化县| 达孜县| 汤阴县| 宜州市| 金川县| 西昌市| 汶川县| 华容县| 禹城市| 绵竹市| 肇庆市| 寿光市| 化州市| 宝应县| 从化市| 丽水市| 塘沽区| 淮阳县| 大连市| 沙洋县| 瑞丽市| 霍州市| 南靖县| 聂拉木县| 明光市| 永州市| 定安县| 岑溪市| 登封市| 淄博市| 黄梅县|