999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

AOP動態(tài)橫切技術(shù)在商業(yè)銀行支付系統(tǒng)中的應(yīng)用

2009-04-29 00:00:00李建敏
電腦知識與技術(shù) 2009年14期

摘要:在傳統(tǒng)的編程方法中對非核心業(yè)務(wù)的處理往往產(chǎn)生了大量的冗余代碼,該文利用AOP的動態(tài)橫切技術(shù)解決這一問題。將那些影響了多個核心業(yè)務(wù)的公共行為封裝到一個可重用模塊,并將其名為“Aspect”,實現(xiàn)代碼向模塊化方向發(fā)展,進(jìn)而降低耦合,達(dá)到軟件開發(fā)維護(hù)簡易化。

關(guān)鍵詞:AOP;動態(tài)橫切;權(quán)限管理

中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2009)14-3813-02

AOP Dynamic Transversely Technology Apply to Commercial Bank's Payment System

LI Jian-min

(Guangdong Police Vocational College, Guagzhou 510520, China)

Abstract: In traditional programme method,there are a mass of redundancy code of dealing with no-core operation. Useing AOP's dynamic transversely technology resolve this problem in this paper. Those commonality actions of affecting multi-core operation encapsulate in module, this module is using by using, named \"Aspece\".The code is developing for modularize direction, therefore reducing coupling, reaching maintenance facilitation in software exploitation.

Key words: AOP; dynamic transversely; purview manage

1 AOP簡介

AOP(Aspect-Oriented Programming,面向方面編程),這種技術(shù)可以說是OOP(Object-Oriented Programing,面向?qū)ο缶幊?的補充和完善。OOP引入封裝、繼承和多態(tài)性等概念來建立一種對象層次結(jié)構(gòu),用以模擬公共行為的一個集合。當(dāng)我們需要為分散的對象引入公共行為的時候,OOP則解決不了這個難題。也就是說,OOP允許你定義從上到下的關(guān)系,但并不適合定義從左到右的關(guān)系。例如日志功能。日志代碼往往水平地散布在所有對象層次中,而與它所散布到的對象的核心功能毫無關(guān)系。對于其他類型的代碼,如安全性、異常處理和透明的持續(xù)性也是如此。這種散布在各處的無關(guān)的代碼被稱為橫切(cross-cutting)代碼,在OOP設(shè)計中,這種導(dǎo)致了大量代碼的重復(fù),而不利于各個模塊的重用。

AOP技術(shù)作為一種完善,利用一種“橫切”的技術(shù),剖開封裝的對象內(nèi)部,將那些影響了多個類的公共行為封裝到一個可重用模塊,并將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝起來,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護(hù)性。AOP代表的是一個橫向的關(guān)系,如果說“對象”是一個空心的圓柱體,其中封裝的是對象的屬性和行為;那么面向方面編程的方法,就仿佛一把利刃,將這些空心圓柱體剖開,以獲得其內(nèi)部的消息。而剖開的切面,也就是所謂的“方面”了。然后它又巧妙地將這些剖開的切面恢復(fù)原狀。AOP的這種特性提高了開發(fā)效率,使變化造成的影響局部化,代碼向模塊化方向發(fā)展,進(jìn)而降低耦合,達(dá)到軟件開發(fā)維護(hù)簡易化,軟件迭代簡化的目標(biāo)。

可以這樣說一個關(guān)注點就是一個為了滿足系統(tǒng)整體目標(biāo)而必須被處理的特定需求,軟件系統(tǒng)可被看成一組關(guān)注點的實現(xiàn),關(guān)注點被分為兩種類型:核心關(guān)注點和橫切關(guān)注點。核心關(guān)注點用來捕捉模塊的中心功能,而橫切關(guān)注點用來捕捉橫跨多個模塊的系統(tǒng)級外圍需求。常見的橫切關(guān)注點有:用戶認(rèn)證、記錄日志、資源池、系統(tǒng)管理、安全保密等。利用典型的OOP方法來實現(xiàn)系統(tǒng)造成核心關(guān)注點和橫切關(guān)注點之間的耦合很不理想,如果要增加新的橫切特性,或者修改現(xiàn)有的橫切功能,都需要對相關(guān)的所有核心模塊進(jìn)行修改。因此引人了AOP是專門處理橫切關(guān)注點的,它提供了一種新的能夠橫切其他模塊的模塊化單位aspect(方面),實現(xiàn)分隔橫切關(guān)注點的目的在AOP方法中,橫切關(guān)注點在aspect中實現(xiàn)而不是把這些橫切關(guān)注點融合到核心模塊中去。AOP還提供了一個類似于編譯器的實體aspect(方面編織器),通過weavnig(織人)過程把核心模塊和橫切模塊合并到一起,從而構(gòu)造出最終的實際系統(tǒng)。這樣,AOP就用一種邊界清晰的方式把橫切關(guān)注點模塊化,產(chǎn)生出一個更容易設(shè)計,實現(xiàn)和維護(hù)的系統(tǒng)架構(gòu),AOP的語言的實現(xiàn)如圖1。

例如:考慮傳統(tǒng)的開發(fā)過程中如果要引入一個日志模塊,需需要很多模塊的源代碼,在其中加入日志功能的實現(xiàn)函數(shù)。如果是在系統(tǒng)開發(fā)后期才引入這個模塊,那么則需要修改很多代碼,從而難免出現(xiàn)遺漏和錯誤。AOP的引入使得程序員只需在軟件系統(tǒng)中聲明一個Aspect來關(guān)注需要進(jìn)行日志的地方,并且在這個Aspect中定義好其具體實現(xiàn)代碼。由AOP體系結(jié)構(gòu)或AOP語言保證這些橫切關(guān)注的實現(xiàn)。其他模塊中保持原來的代碼。這樣一來軟件的模塊化程度大大提高,而且程序邏輯的變更也變得非常靈活。

2 AOP動態(tài)橫切技術(shù)

AOP的動態(tài)橫切技術(shù)是利用截取消息的方式,對該消息進(jìn)行修改,以取代原有對象行為的執(zhí)行。動態(tài)橫切是通過切入點和連接點在一個方面中創(chuàng)建行為的過程,連接點可以在執(zhí)行時橫向地應(yīng)用于現(xiàn)有對象。動態(tài)橫切通常用于幫助向?qū)ο髮哟沃械母鞣N方法添加日志記錄或身份認(rèn)證。也可能理解為是引入了一套類似事件觸發(fā)機制。在很多應(yīng)用過程中,動態(tài)橫切技術(shù)基本上代表了AOP。

動態(tài)橫切技術(shù)的核心主要包括join point(連接點),point cut(切入點),advice(通知)和aspect。

1) join point(連接點):是程序執(zhí)行中的一個精確執(zhí)行點,函數(shù)調(diào)用、函數(shù)執(zhí)行、變量賦值等都可是執(zhí)行點,例如PriceManager類中的一個方法setPrice就是一個連接點。它是一個抽象的概念,在實現(xiàn)AOP時,并不需要去定義一個join point;它是一個隱性的概念,是供Point cut來提取的點。

2) point cut(切入點):本質(zhì)上是一個捕獲連接點的結(jié)構(gòu)。在AOP中,可以定義一個point cut,來捕獲相關(guān)方法的調(diào)用。

3) advice(通知):是point cut的執(zhí)行代碼,是執(zhí)行“方面”的具體邏輯。

4) aspect(方面):point cut和advice結(jié)合起來就是aspect,它類似于OOP中定義的一個類,但它代表的更多是對象間橫向的關(guān)系。

多個訪問類同時訪問一個共享數(shù)據(jù)對象時,每個訪問類在訪問這個數(shù)據(jù)對象時,需要將數(shù)據(jù)對象上鎖,訪問完成后,再實行解鎖,供其它并發(fā)線程訪問,這是我們處理并發(fā)訪問資源的方式。為了實現(xiàn)這個需求,先實現(xiàn)傳統(tǒng)的編程,這里我們假定有一個寫鎖,對數(shù)據(jù)對象實行寫之前,首先對這個對象進(jìn)行上寫鎖,寫操作完畢后,必須釋放寫鎖。傳統(tǒng)編程鎖的實現(xiàn)方式是在每個具體類中實現(xiàn),這種實現(xiàn)方式有很多重復(fù)的編碼,如果稍微不小心,上鎖解鎖次序搞錯,系統(tǒng)就隱含大的BUG,這種可能性會隨著這個數(shù)據(jù)對象永遠(yuǎn)存在下去,后患無窮。

用AOP概念來重新實現(xiàn)上述需求,只是換了觀察問題的一個新視角度。AOP是從縱向方面來解決上述問題,advice - 真正的執(zhí)行代碼,或者說關(guān)注的實現(xiàn)。 類似Action。join point - 代碼中激活advice被執(zhí)行的觸發(fā)點。這樣一來,Worker中就不用再考慮關(guān)于“鎖”的問題,只關(guān)心數(shù)據(jù)操作的主要方法就可以了。下面是用傳統(tǒng)方法和AOP方法解決這個問題的圖解。

3 動態(tài)橫切技術(shù)在商業(yè)銀行支付系統(tǒng)中的應(yīng)用

商業(yè)銀行支付系統(tǒng)采取client_server結(jié)構(gòu),其中,服務(wù)器端是系統(tǒng)的核心,它的作用是:為直連方式的商業(yè)銀行提供支付系統(tǒng)與商業(yè)銀行行內(nèi)系統(tǒng)接口的API,作為支付業(yè)務(wù)發(fā)送和接收的通道;為間連方式的商業(yè)銀行提供支付業(yè)務(wù)的服務(wù)平臺,由客戶端發(fā)起接收支付業(yè)務(wù)。為保證前置系統(tǒng)穩(wěn)定可靠運行,MBFE服務(wù)器配置建議為雙機熱備模式。此外,MBFE系統(tǒng)還包括:密押子系統(tǒng)(密押卡或密押服務(wù)器)、客戶端、網(wǎng)絡(luò)系統(tǒng)等。

系統(tǒng)對城市商業(yè)銀行行內(nèi)系統(tǒng)的業(yè)務(wù)員、業(yè)務(wù)主管和系統(tǒng)管理員等不同操作人員進(jìn)行權(quán)限管理,操作人員進(jìn)入系統(tǒng),必須輸入口令,口令與用戶名相符才能進(jìn)入。操作人員進(jìn)入系統(tǒng)后,只能訪問經(jīng)過授權(quán)的功能。前置機端的用戶管理實行雙簽制。系統(tǒng)管理員增設(shè)用戶,業(yè)務(wù)經(jīng)理對該用戶進(jìn)行生效處理,互相牽制,新用戶才可登錄系統(tǒng)。如用戶密碼遺失,系統(tǒng)管理員有權(quán)對該用戶密碼作修改,經(jīng)業(yè)務(wù)經(jīng)理確認(rèn)后,登錄系統(tǒng)。

商業(yè)銀行系統(tǒng)發(fā)起大額實時支付業(yè)務(wù)、小額批量支付業(yè)務(wù)、撤銷業(yè)務(wù)、支付業(yè)務(wù)狀態(tài)查詢以及日終支付業(yè)務(wù)明細(xì)數(shù)據(jù)下載請求,商業(yè)銀行系統(tǒng)接收大額實時支付業(yè)務(wù)、小額批量支付業(yè)務(wù)、即時轉(zhuǎn)賬通知、日間透支計息、支付業(yè)務(wù)收費清單、銀行匯票兌付通知、退回申請業(yè)務(wù)、退回申請應(yīng)答業(yè)務(wù)、查詢業(yè)務(wù)、查復(fù)業(yè)務(wù)、自由格式報文、系統(tǒng)狀態(tài)變換、匯總對賬通知、支付業(yè)務(wù)明細(xì)數(shù)據(jù)等,這些業(yè)務(wù)都與權(quán)限管理是分不開的。

比如在大額實時支付業(yè)務(wù)時,采用傳統(tǒng)的設(shè)計方法,其代碼如下:

public class paycash

{ private ArrayList m_paycashs;

public paycashr ()

{ m_paycashs = new ArrayList();

}

public void Addpaycash(Order1 order2)

{ if (permissions.Verify(Permission.ADMIN))

{ m_paycash.Add(order1);

} }

public void Removepaycash(Order1 order1)

{ if (permissions.Verify(Permission.ADMIN))

{ m_Orders.Remove(order1);

}}}

同樣的,在支付系統(tǒng)中,還需要小額批量支付業(yè)務(wù),它采用了同樣的授權(quán)機制:

public class paylittlebatch

{ private ArrayList m_ paylittlebatchs;

public paylittlebatch ()

{ m_ paylittlebatchs = new ArrayList();

}

public void Addpaylittlebatch (Order2 order2)

{ if (permissions.Verify(Permission.ADMIN))

{ m_ paylittlebatchs.Add(order2);

} }

public void RemoveProduct(Order2 order2)

{ if (permissions.Verify(Permission.ADMIN))

{ m_paylittlebatchs.Remove(order2);

} } }

如此以來,在整個支付系統(tǒng)中,核心業(yè)務(wù)包括大額實時支付業(yè)務(wù)、小額批量支付業(yè)務(wù)、為支付服務(wù)的清算賬戶信息和管理信息,它們都需要相同的權(quán)限管理。

毫無疑問,利用AOP技術(shù),我們可以分離出系統(tǒng)的核心關(guān)注點和橫切關(guān)注點,從橫向的角度,截取業(yè)務(wù)管理行為的內(nèi)部消息,以達(dá)到織入權(quán)限管理邏輯的目的。當(dāng)執(zhí)行Add()等方法時,系統(tǒng)將驗證用戶的權(quán)限,調(diào)用橫切關(guān)注點邏輯,因此該方法即為AOP的join point。對于系統(tǒng)而言,每個需要權(quán)限驗證的方法都是一個單獨的join point。由于權(quán)限驗證將在每個方法執(zhí)行前執(zhí)行,所以對于這一系列join point,只需要定義一個point cut。當(dāng)系統(tǒng)執(zhí)行到j(luò)oin point處時,將根據(jù)定義去查找對應(yīng)的point cut,然后執(zhí)行這個橫切關(guān)注點需要實現(xiàn)的邏輯,即advice。而point cut和advice,就組合成了一個權(quán)限管理aspect。

由于aspect是一個封裝的對象,我們可以定義這樣一個aspect:

private static aspect AuthorizationAspect{……}

然后在這個aspect中定義point cut,在point cut中,定義了需要截取上下文消息的方法,例如:

private pointcut authorizationExecution():

execution(public void paycash. Addpaycash (Order1)) ||

execution(public void paycash. Removepaycash (Order1)) ||

execution(public void paylittlebatch. Addpaylittlebatch (order2) ||

execution(public void paylittlebatch. Removepaylittlebatch (order2);

由于權(quán)限驗證是在支付方法執(zhí)行之前完成,因此在before advice中,定義權(quán)限檢查:

before(): authorizationExecution()

{ if !(permissions.Verify(Permission.ADMIN))

{ throw new UnauthorizedException();

} }

通過定義了這樣一個完整的aspect,當(dāng)系統(tǒng)調(diào)用paycash或paylittlebatch的相關(guān)方法時,就觸發(fā)了point cut,然后調(diào)用相應(yīng)的advice邏輯。如此以來,paycash r和paylittlebatchr模塊就與權(quán)限管理模塊完全解除了依賴關(guān)系,同時也消除了傳統(tǒng)設(shè)計中不可避免的權(quán)限判斷的重復(fù)代碼。這對于建立一個松散耦合、可擴展的系統(tǒng)軟件是非常有利的。

參考文獻(xiàn):

[1] 熊健,毛曉光.AOP技術(shù)在基于構(gòu)件軟件測試中的應(yīng)用[J].南京大學(xué)學(xué)報:自然科學(xué),2005(1).

[2] 吳煒煜.面向?qū)ο蠓治鲈O(shè)計與編程(OOD/OOA/OOP/AOP[M].2版.北京:清華大學(xué)出版社,2007.

主站蜘蛛池模板: 国产精品久久自在自线观看| 久久夜色精品| 日韩毛片免费观看| 免费人欧美成又黄又爽的视频| 婷婷综合色| 国产亚卅精品无码| 一级福利视频| 亚洲一区毛片| 亚洲人妖在线| 亚洲成人黄色在线| 黄色福利在线| 国产一区自拍视频| 欧美区在线播放| 日韩精品欧美国产在线| 欧美一区精品| 欧美精品1区| 中文无码精品a∨在线观看| 欧美一区二区三区国产精品 | 国产一区亚洲一区| 亚洲午夜福利在线| 国产日本一线在线观看免费| 青青青伊人色综合久久| 亚洲欧洲一区二区三区| 99热这里只有精品久久免费| 国产欧美在线观看一区| 五月天在线网站| 国产亚洲欧美另类一区二区| 国产精品成人观看视频国产 | 在线观看国产精美视频| 91久久夜色精品| 456亚洲人成高清在线| 久久精品无码一区二区国产区| 一级毛片免费不卡在线视频| 亚洲看片网| 女人天堂av免费| 人妻精品久久久无码区色视| 91网红精品在线观看| 午夜a视频| 久久综合色视频| 国产精品欧美激情| 久久精品中文无码资源站| 欧美亚洲综合免费精品高清在线观看| 亚洲欧洲自拍拍偷午夜色| 亚洲伊人电影| 国产一级毛片网站| 欧美不卡二区| 国产自在线拍| 丁香婷婷久久| 亚洲AV一二三区无码AV蜜桃| 久久国产乱子| 又爽又黄又无遮挡网站| 国产农村精品一级毛片视频| 五月天福利视频| 亚洲人成色在线观看| 制服丝袜一区| 亚洲人成日本在线观看| 无码久看视频| 91在线精品麻豆欧美在线| 国产精品观看视频免费完整版| 国产一区在线观看无码| 久久99国产精品成人欧美| 日韩在线播放中文字幕| 国产91久久久久久| 无码一区二区三区视频在线播放| 精品自窥自偷在线看| 中文国产成人久久精品小说| 日韩精品免费一线在线观看| 老司机午夜精品视频你懂的| 免费一级全黄少妇性色生活片| 国产白浆视频| 情侣午夜国产在线一区无码| 国产成人AV男人的天堂| 日韩成人免费网站| a毛片免费在线观看| 91免费国产高清观看| 高h视频在线| 亚洲综合一区国产精品| 国产精品九九视频| 色婷婷电影网| 欧美一级夜夜爽www| 成人在线观看不卡| 国禁国产you女视频网站|