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

?

Spring中AOP的連接點(diǎn)檢測器

2013-04-29 20:40:07薛冰
電腦知識與技術(shù) 2013年9期
關(guān)鍵詞:連接點(diǎn)

摘要:越來越多的系統(tǒng)開始使用AOP(面向切面編程),面向切面編程越來越重要,但是AOP的連接點(diǎn)丟失問題一直未能很好的解決,該文針對使用Spring框架的系統(tǒng)中日志生成業(yè)務(wù)設(shè)計(jì)了一種連接點(diǎn)檢測器,可以遍歷所有連接點(diǎn),并在數(shù)據(jù)庫中維護(hù)連接點(diǎn)狀態(tài)。

關(guān)鍵詞:Spring;AOP;連接點(diǎn);面向切面編程;連接點(diǎn)丟失

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2013)09-2151-03

Spring中可以設(shè)定一種規(guī)范的方法名前綴來使該方法變成切入點(diǎn)實(shí)現(xiàn)切面業(yè)務(wù),例如日志,安全驗(yàn)證等。當(dāng)一個(gè)方法運(yùn)行時(shí)spring就會檢測該方法是否符合切入點(diǎn)特征,但是這種方法會出現(xiàn)很多人為的失誤或者錯(cuò)誤,假如我們不經(jīng)意的弄錯(cuò)了方法名或者某方法的名稱與該前綴相同,這個(gè)方法將不會被執(zhí)行切面的業(yè)務(wù)或者多余的執(zhí)行了切面業(yè)務(wù),所以我們設(shè)計(jì)了一種檢測器,將所有的連接點(diǎn)存入表中進(jìn)行維護(hù),來解決人為造成的連接點(diǎn)丟失或錯(cuò)配問題。

1 AOP簡介及Spring中基于AOP技術(shù)對日志的管理原理

1.1 AOP簡介

它利用一種稱為“橫切”的技術(shù),剖解開封裝的對象內(nèi)部,并將那些影響了多個(gè)類的公共行為封裝到一個(gè)可重用模塊,并將其名為“Aspect” ,便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來的可操作性和可維護(hù)性[1]。AOP代表的是一個(gè)橫向的關(guān)系,如果說“對象”是一個(gè)空心的圓柱體,其中封裝的是對象的屬性和行為;那么面向方面編程的方法,就仿佛一把利刃,將這些空心圓柱體剖開,以獲得其內(nèi)部的消息。而剖開的切面,也就是所謂的“方面”了。然后它又以巧奪天功的妙手將這些剖開的切面復(fù)原,不留痕跡。

圖1 AOP動態(tài)代理實(shí)現(xiàn)原理示意圖

上圖為用動態(tài)代理的方式實(shí)現(xiàn)AOP的示意圖,調(diào)用者捕捉到我們的連接點(diǎn),如圖中的原始對象,然后用代理封裝對象,代理中加入我們要對關(guān)注點(diǎn)實(shí)施的操作,如記錄,參數(shù)驗(yàn)證等。然后將結(jié)果返回給調(diào)用者,這就簡單的實(shí)現(xiàn)了一個(gè)AOP完整實(shí)現(xiàn)過程。

1.2 AOP里的重要概念

1)join point(連接點(diǎn)):是程序執(zhí)行中的一個(gè)精確執(zhí)行點(diǎn),例如類中的一個(gè)方法。它是一個(gè)抽象的概念,在實(shí)現(xiàn)AOP時(shí),并不需要去定義一個(gè)join point[2]。

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

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

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

5)introduce(引入):為對象引入附加的方法或?qū)傩裕瑥亩_(dá)到修改對象結(jié)構(gòu)的目的。有的AOP工具又將其稱為mixin[6]。

上述的技術(shù)特性組成了基本的AOP技術(shù),大多數(shù)AOP工具均實(shí)現(xiàn)了這些技術(shù)。它們也可以是研究AOP技術(shù)的基本術(shù)語。

2.3 AOP技術(shù)的缺點(diǎn)分析

AOP技術(shù)產(chǎn)生的結(jié)構(gòu)沖突問題,我們可以利用反射機(jī)制來解決[7]。采用AOP技術(shù)將橫切代碼與基礎(chǔ)代碼分離,這樣雖然減少了代碼的冗余且方便代碼的管理,但是會產(chǎn)生一個(gè)結(jié)構(gòu)沖突的問題,如果程序被多次修改,aspect面的程序和連接點(diǎn)的連接可能被影響到。所以就出現(xiàn)了反射機(jī)制,如果利用反射機(jī)制,在AOP切面代碼編織進(jìn)入連接點(diǎn)時(shí),在這切面與連接點(diǎn)中間形成一個(gè)定義層,通過這個(gè)定義層來解決程序被修改而導(dǎo)致的結(jié)構(gòu)問題[8]。

AOP技術(shù)產(chǎn)生的連接點(diǎn)丟失和錯(cuò)誤配置問題,我自己開發(fā)設(shè)計(jì)了一種連接點(diǎn)統(tǒng)一管理的機(jī)制來解決這個(gè)問題。在基于AOP的系統(tǒng)設(shè)計(jì)中,連接點(diǎn)的定義一般會以一種規(guī)則形式[9],如果連接點(diǎn)因?yàn)槟承┤藶樵蚧蛘叱绦虻男薷?,?dǎo)致某些連接點(diǎn)丟失,或者錯(cuò)誤匹配到了不同的aspect切面上,就導(dǎo)致了連接點(diǎn)丟失錯(cuò)配問題[10]。如果我們把所有的連接點(diǎn)進(jìn)行統(tǒng)一的存儲管理,每次系統(tǒng)程序修改后,我們利用這個(gè)連接點(diǎn)管理機(jī)制對連接點(diǎn)進(jìn)行統(tǒng)一檢測,然后發(fā)現(xiàn)其中的問題,我們就可以發(fā)現(xiàn)并解決出現(xiàn)錯(cuò)誤的問題,把有問題或者有可能出現(xiàn)問題的連接點(diǎn)導(dǎo)出一個(gè)連接點(diǎn)報(bào)告,這樣我們就可以直觀有效的發(fā)現(xiàn)出現(xiàn)的問題,從而解決連接點(diǎn)丟失和連接點(diǎn)錯(cuò)配的問題。

2.4 連接點(diǎn)管理機(jī)制的提出

在一個(gè)基于AOP的系統(tǒng)中,會有非常多的連接點(diǎn),這些連接點(diǎn)都是我們進(jìn)行定義的,但是在定義的時(shí)候,可能會出現(xiàn)一些人為的失誤或者程序修改造成的連接點(diǎn)出現(xiàn)問題,所以我們提出了連接點(diǎn)管理機(jī)制。

連接點(diǎn)的管理機(jī)制主要思想就是把程序中所有定義過的連接點(diǎn)進(jìn)行統(tǒng)計(jì)存儲,當(dāng)我們程序修改后,啟動這個(gè)連接點(diǎn)管理機(jī)制,我們就可以通過我們存儲的信息,與程序修改后更新的連接點(diǎn)信息進(jìn)行比較,得出有問題的連接點(diǎn)。

比如在Spring框架中,可以設(shè)定一種規(guī)范的方法名前綴來使該方法變成切入點(diǎn)實(shí)現(xiàn)切面業(yè)務(wù)[11],我們針對這個(gè)原理,通過一種方式,將一個(gè)包內(nèi)所有的類中,所有符合的方法進(jìn)行收集整理,存入數(shù)據(jù)庫中,對他們的狀態(tài)進(jìn)行維護(hù),每次檢測都會得出連接點(diǎn)的丟失與改動的詳細(xì)記錄。通過這種方式來推斷連接點(diǎn)的安全與否。

3 基于AOP的連接點(diǎn)檢測器的實(shí)現(xiàn)

3.1 基于AOP的連接點(diǎn)檢測器的原理

在Spring框架中,可以設(shè)定一種規(guī)范的方法名前綴來使該方法變成切入點(diǎn)實(shí)現(xiàn)切面業(yè)務(wù),我們針對這個(gè)原理,通過一種方式,將一個(gè)包內(nèi)所有的類中,所有符合的方法進(jìn)行收集整理,存入數(shù)據(jù)庫中,對他們的狀態(tài)進(jìn)行維護(hù),每次檢測都會得出連接點(diǎn)的丟失與改動的詳細(xì)記錄。通過這種方式來推斷連接點(diǎn)的安全與否。

3.2 數(shù)據(jù)庫的設(shè)計(jì)

在整個(gè)檢測器的設(shè)計(jì)中,數(shù)據(jù)庫是非常重要的一個(gè)環(huán)節(jié),我們要將所有的方法存入到數(shù)據(jù)庫中進(jìn)行維護(hù),通過數(shù)據(jù)庫的方式,可以直觀快速的找到問題的所在。

數(shù)據(jù)庫的重要字段:UID,methodName,methodClass,methodPackage,state。UID是方法的唯一標(biāo)識,methodName,methodClass,methodPackage表示出方法的名字,來自于哪個(gè)類,哪個(gè)包,可以唯一確定一個(gè)方法。State是方法的狀態(tài),表示出這個(gè)方法是否為丟失連接點(diǎn)或者是新加入的連接點(diǎn)。

3.3 具體的實(shí)現(xiàn)方法

檢測器的輸入為包名和在Spring中設(shè)置的方法名的正則式,如*add。輸出為變動的方法名及變動原因。

1)首先在Spring的日志程序段中加入對所捕捉到的切入點(diǎn)方法名的檢測程序,如果此方法沒有在數(shù)據(jù)庫中,則將此方法存入數(shù)據(jù)庫,如果已經(jīng)存在數(shù)據(jù)庫中的話,則不進(jìn)行任何操作。

2)輸入包名及正則式,遍歷整個(gè)包,將所有的類找出存入LIST。輸入以包名為單位,遍歷整個(gè)包中的所有類,存入一個(gè)LIST。

3)遍歷所有類中,符合正則式的方法存入CLASSLIST。通過LIST,挨個(gè)將類取出進(jìn)行遍歷,通過Field[] fields =a.class.getFields(); Method[] methods=a.getMethods();這兩個(gè)方法把類中的所有方法存入一個(gè)LIST中,然后通過輸入的正則式篩選出符合條件的方法,將他們存入的MethodList中。

4)查詢表中數(shù)據(jù),如果是第一次運(yùn)行則將MethodList所有方法插入表中,如果不是第一次運(yùn)行則與MethodList對照。

3.4連接點(diǎn)管理機(jī)制算法

步驟 1遍歷所有連接點(diǎn).得到LIST1

步驟 2查詢joinpoint表得到 連接點(diǎn)LIST2

步驟 3比較LIST1 LIST2的長度

步驟 4如果LENGTH 1 = LENGTH 2 那么比較LIST1 和 LIST2中的連接點(diǎn)是否一致

步驟 5如果LENGTH 1 != LENGTH 2 且 LENGTH1 < LENGTH2那么查找丟失的連接點(diǎn)

步驟 6如果LENGTH1 != LENGTH 2 且 LENGTH1>LENGTH2 查找LIST1中多出的連接點(diǎn)

步驟 7導(dǎo)出結(jié)果,得到連接點(diǎn)的改動。

4 結(jié)束語

本文的設(shè)計(jì)的檢測器,針對Spring框架,利用此檢測器可以有效的避免連接點(diǎn)丟失,連接點(diǎn)錯(cuò)配的問題,因?yàn)橛袛?shù)據(jù)庫對所有符合的方法進(jìn)行維護(hù)管理,可以直觀而且快速的檢測到問題的所在。但是由于使用到了數(shù)據(jù)庫,而且要遍歷整個(gè)工程包,所以工作量會比較大,如果工程太大的話,檢測的效率會是個(gè)問題。

參考文獻(xiàn):

[1] Hameed K, Williams R,Smith J.Aspect Oriented Software Fault Tolerance[C].Proceedings of 4th Interna-tional Conference on Computer Science & Education (WCE09), London, 2009(1):1-3.

[2] Breivold H P,Crnkovic I.A systematic review of software archi-tecture evolution research[C]. Information and Software Technology,2012:16-40.

[3] Banani R,Graham N.Methods for evaluating software architec-ture:a survey[R]. Technical Report 2008-545 Queens University,2008 : 1-82.

[4] YE Peng,NI You-cong,HU Ming.Research on measurement tech-nique for evaluating adaptability of aspect-oriented software architec-ture[M]. Advanced Materials Research,2011, 268-270: 1307-1312.

[5] Garcia-magarino I,Cossentino M,Seidita V.A metricssuite for evaluating agent-oriented architectures[C]. Proc of the 25thACM Symposium on Applied Computing , 2010: 912-919.

[6] SANTANNA C,GAMEZ N,GARCIA A,et al.General architectureevaluation process/metrics,AOSD-Europe Deliverable D85[Z].2007.

[7] Jones M,Hamlen K W.Disambiguating Aspect-Oriented Security Poli-cies[C]. Proceedingsof of the 9th International Confidence on Aspect-Oriented Software Development(AOSD10) . 2010 .

[8] Clement A,Colyer A,Harley G,et al.Using eclipse aspect:your first steps[EB/OL]. http://www.informit.com/articles/article.aspx?p=357692.

[9] Liliana Dobrica,Eila Niemela.A survey on software architecture analysis methods[M]. IEEE Transactions on Software Engineering,2002 .

[10] Joseph D. Gradecki,Nicholas Lesiecki.Mastering Aspect: Aspect-Oriented Programming in Java[Z]. 2005

[11] SantAnna C,Lobato C,Kulesza U,et al. On the quantitative assessment of modular multi-agent system architectures [C].Proc of International Conference on Multiagent Systems and Software Architecture. London: Springer-Verlag,2006: 111-135.

猜你喜歡
連接點(diǎn)
基于A3航攝儀的小基高比影像連接點(diǎn)精提取技術(shù)研究
我國沖突法對連接點(diǎn)的軟化處理
基于彈性厚粘膠層的結(jié)構(gòu)性連接點(diǎn)響應(yīng)建模和預(yù)測
汽車文摘(2016年6期)2016-12-07 00:23:38
基于相關(guān)性篩選原理的公共連接點(diǎn)諧波畸變量的分層量化
電測與儀表(2015年3期)2015-04-09 11:37:22
顏學(xué)海:把握投資創(chuàng)新與模式創(chuàng)新的連接點(diǎn)
芻議小學(xué)高年級閱讀教學(xué)中巧妙設(shè)問的策略
安达市| 大渡口区| 正蓝旗| 南通市| 怀安县| 陆良县| 防城港市| 铜陵市| 伽师县| 阳山县| 左云县| 应城市| 梁河县| 武强县| 济源市| 遂平县| 威远县| 隆化县| 林西县| 汾阳市| 虹口区| 绥芬河市| 牡丹江市| 柳林县| 麟游县| 岑巩县| 济源市| 阜阳市| 尚志市| 金乡县| 阿克| 兖州市| 彰武县| 清原| 平昌县| 宜城市| 隆化县| 永泰县| 安图县| 抚顺市| 龙游县|