劉 成,張 凱,陳建勛
(武漢科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,湖北 武漢430065)
在企業(yè)級(jí)信息系統(tǒng)中,數(shù)據(jù)的準(zhǔn)確性、合法性是企業(yè)關(guān)注的核心。數(shù)據(jù)驗(yàn)證是指對(duì)數(shù)據(jù)在特定的上下文中的合法性檢查,是過濾非法數(shù)據(jù)的安全屏障[1]。在企業(yè)級(jí)應(yīng)用項(xiàng)目中,幾乎所有與用戶交互相關(guān)的地方也都會(huì)用到數(shù)據(jù)驗(yàn)證,它既可以防止非法數(shù)據(jù)進(jìn)入系統(tǒng)內(nèi)部,又可以及時(shí)為用戶反饋錄入數(shù)據(jù)的驗(yàn)證結(jié)果。所以,數(shù)據(jù)驗(yàn)證是提高軟件系統(tǒng)魯棒性的一個(gè)關(guān)鍵過程。
一般來說,數(shù)據(jù)驗(yàn)證根據(jù)不同的因素有不同的類型劃分。從場(chǎng)所上來說分為:客戶端驗(yàn)證、服務(wù)器端驗(yàn)證和數(shù)據(jù)庫端驗(yàn)證。從驗(yàn)證時(shí)機(jī)來說分為:用戶輸入時(shí)驗(yàn)證和用戶輸入后驗(yàn)證。其中驗(yàn)證輸入時(shí)只能在客戶端實(shí)現(xiàn)。從驗(yàn)證復(fù)雜度來說分為:錄入控制、域完整性校驗(yàn)、實(shí)體完整性校驗(yàn)和參照完整性校驗(yàn)。錄入控制是約束用戶輸入的每個(gè)字符;域完整性校驗(yàn)指輸入項(xiàng)要有指定的規(guī)則;實(shí)體完整性校驗(yàn)指在域完整性的前提下,不同域之間是否存在相互矛盾;參照完整性校驗(yàn)指在滿足以上驗(yàn)證基礎(chǔ)上還要考慮到數(shù)據(jù)在數(shù)據(jù)庫表中主鍵不能重復(fù)的問題等。
當(dāng)前大多數(shù)數(shù)據(jù)驗(yàn)證方案:只實(shí)現(xiàn)驗(yàn)證復(fù)雜度中域完整性校驗(yàn),從而數(shù)據(jù)驗(yàn)證功能不夠全面;驗(yàn)證場(chǎng)所單一化,導(dǎo)致服務(wù)器端效率較低。如文獻(xiàn)[2]提出了一種面向切面的數(shù)據(jù)驗(yàn)證組件設(shè)計(jì)方案,該方案只在服務(wù)器端進(jìn)行數(shù)據(jù)驗(yàn)證,驗(yàn)證場(chǎng)所單一,不能實(shí)現(xiàn)驗(yàn)證復(fù)雜度中的錄入控制,會(huì)降低用戶與系統(tǒng)的交互效率。文獻(xiàn)[3]提出了基于Valang技術(shù)的數(shù)據(jù)驗(yàn)證方案,該方案能實(shí)現(xiàn)完整的數(shù)據(jù)驗(yàn)證功能,但驗(yàn)證功能在客戶端和服務(wù)器兩端有重復(fù)性工作,服務(wù)器端性能沒有最優(yōu)化,并且移植性較不好。為了克服以上問題,本文提出一種客戶端和服務(wù)器端在驗(yàn)證復(fù)雜度上進(jìn)行分工合作的混合驗(yàn)證方案。
基于系統(tǒng)的移植性和維護(hù)性,開發(fā)者一般不采用數(shù)據(jù)庫端驗(yàn)證的方式。要實(shí)現(xiàn)一個(gè)完善的數(shù)據(jù)驗(yàn)證功能,應(yīng)該包括4種驗(yàn)證復(fù)雜度。從驗(yàn)證場(chǎng)所來說,不管是客戶端數(shù)據(jù)驗(yàn)證還是服務(wù)器端數(shù)據(jù)驗(yàn)證都不能覆蓋所有驗(yàn)證復(fù)雜度,但兩者的并集可以實(shí)現(xiàn)所有的驗(yàn)證復(fù)雜度驗(yàn)證。
本文驗(yàn)證方案的整體組織結(jié)構(gòu)圖如圖1所示。將驗(yàn)證復(fù)雜度中的錄入控制驗(yàn)證和域完整性驗(yàn)證在客戶端實(shí)現(xiàn),實(shí)體完整性驗(yàn)證和參照完整性在服務(wù)器端實(shí)現(xiàn)。其依據(jù)是:把盡可能多的任務(wù)放到客戶端處理是提高服務(wù)器端效率的有效途徑。在上述的驗(yàn)證復(fù)雜度中,前兩者只涉及到詞法分析,可以在客戶端完成;后兩者需要語義分析,需要在服務(wù)器端進(jìn)行。但同時(shí)為了數(shù)據(jù)驗(yàn)證的安全性,在客戶端驗(yàn)證失效時(shí),服務(wù)器端也能處理域完整性驗(yàn)證。
圖1 驗(yàn)證方案的組織結(jié)構(gòu)
以往客戶端表單的數(shù)據(jù)驗(yàn)證中,一般在文本對(duì)象模型(document object model,DOM)元素中指定了點(diǎn)擊事件的觸發(fā)函數(shù),如給提交按鈕指定onClick觸發(fā)事件,并在此函數(shù)中進(jìn)行數(shù)據(jù)驗(yàn)證。該驗(yàn)證函數(shù)逐個(gè)檢驗(yàn)表單中每個(gè)組件的值,若全部驗(yàn)證成功則執(zhí)行后臺(tái)操作,否則提示用戶錯(cuò)誤的表單項(xiàng),阻止后續(xù)的操作。這種實(shí)現(xiàn)在邏輯上易于理解,但是表示層的組件代碼需要引用驗(yàn)證函數(shù),而驗(yàn)證函數(shù)也要引用表單項(xiàng)組件,兩者不能獨(dú)立開來,導(dǎo)致耦合度較高,不易于維護(hù)和擴(kuò)展,重用性也較低。
針對(duì)此問題,提出了在客戶端以事件監(jiān)聽方式分離表示層和表示層數(shù)據(jù)驗(yàn)證的方案??蛻舳蓑?yàn)證的模型包括XML文件、表單、驗(yàn)證文件、事件監(jiān)聽器。其具體框架如圖2所示。
圖2 客戶端驗(yàn)證框架
在圖2中,驗(yàn)證模型的各個(gè)部分之間的功能如下:
(1)XML配置文件。它描述對(duì)應(yīng)表單中具體表單項(xiàng)所采用的驗(yàn)證方式。它以驗(yàn)證類(Validator類及其子類)的數(shù)組形式被加載到程序中。在客戶端框架中,由于表單多樣化,XML文件需要編程人員具體編寫。XML文檔包括一個(gè)根結(jié)點(diǎn)和多個(gè)第二級(jí)結(jié)點(diǎn),其格式約定如下:
<FormValidator>
<Validator type=”String”expression=””source=””/>
<Validator type=”Number”source=””/>
…
</FormValidator>
在第二級(jí)結(jié)點(diǎn)中,type屬性代表域完整性驗(yàn)證的類型,expression表示按照正則表達(dá)式規(guī)則驗(yàn)證匹配,source對(duì)應(yīng)表單組件的id。
(2)Validator類及其子類。該類的source屬性指向表單中要驗(yàn)證的表單項(xiàng)元素,擁有對(duì)目標(biāo)元素?cái)?shù)據(jù)值驗(yàn)證的功能。Validator1和Validator2是Validator的不同子類,比如用來驗(yàn)證數(shù)字的驗(yàn)證類和用來驗(yàn)證日期的驗(yàn)證類等。
(3)表單。只描述表示層具體元素和排版信息,無需關(guān)心元素的value值是否需要驗(yàn)證。
(4)事件監(jiān)聽器。事件監(jiān)聽器FormValidator通過加載XML文件中的配置,把對(duì)應(yīng)表單的驗(yàn)證需求信息以Validator類的形式全部存入其中。然后通過Validator給表單項(xiàng)添加上監(jiān)聽事件,并監(jiān)聽Validator類的驗(yàn)證結(jié)果。
服務(wù)器端數(shù)據(jù)驗(yàn)證完成驗(yàn)證復(fù)雜度中的實(shí)體完整性驗(yàn)證和參照完整性驗(yàn)證。當(dāng)用戶取消客戶端腳本運(yùn)行狀態(tài)時(shí),客戶端驗(yàn)證將失效,然而域完整性控制驗(yàn)證是系統(tǒng)安全性保障的必要條件,故服務(wù)器端需要域完整性驗(yàn)證。面向切面編程(aspect-oriented programming,AOP)技術(shù)能較好的分離服務(wù)器端驗(yàn)證模塊和系統(tǒng)業(yè)務(wù)邏輯模塊,使代碼耦合度更低,Valang可以解決域完整性控制驗(yàn)證,并且侵入性?。?]。因此,本文采用AOP和Valang技術(shù)來實(shí)現(xiàn)服務(wù)器端的數(shù)據(jù)驗(yàn)證。
當(dāng)客戶端數(shù)據(jù)傳到服務(wù)器端,服務(wù)器端執(zhí)行相應(yīng)的業(yè)務(wù)邏輯處理。在執(zhí)行業(yè)務(wù)邏輯前AOP切面類截獲處理函數(shù)的參數(shù)并阻止業(yè)務(wù)處理函數(shù)的執(zhí)行,然后對(duì)截獲的數(shù)據(jù)進(jìn)行驗(yàn)證,從而實(shí)現(xiàn)業(yè)務(wù)邏輯和驗(yàn)證模塊的完全分離。服務(wù)器端數(shù)據(jù)驗(yàn)證的數(shù)據(jù)流圖如圖3所示。
圖3 服務(wù)器端數(shù)據(jù)驗(yàn)證數(shù)據(jù)流
服務(wù)器端數(shù)據(jù)驗(yàn)證主要進(jìn)行了實(shí)體完整性驗(yàn)證和參照完整性驗(yàn)證,這些數(shù)據(jù)驗(yàn)證涉及到系統(tǒng)中的邏輯性問題。譬如,工程的開工日期不能大于結(jié)束日期、身份證的隱含性別和填寫性別不能矛盾、憑據(jù)有效日期在幾個(gè)月之內(nèi)、數(shù)據(jù)庫表能接受當(dāng)前信息的插入等。而在服務(wù)器端的域完整性驗(yàn)證是在客戶端驗(yàn)證失效的情況下才執(zhí)行,其通常是約定參數(shù)的格式。譬如,時(shí)間的格式、身份證號(hào)碼的格式等。服務(wù)器端數(shù)據(jù)驗(yàn)證模塊結(jié)構(gòu)圖如圖4所示。
圖4 服務(wù)器端數(shù)據(jù)驗(yàn)證模塊類結(jié)構(gòu)
Java能較好的闡述邏輯性問題,適合實(shí)體完整性驗(yàn)證和參照完整性驗(yàn)證;Valang支持以XML配置方式來約束驗(yàn)證項(xiàng)的約束規(guī)則,適合域完整性驗(yàn)證。在圖5中通過Java編碼方式實(shí)現(xiàn)實(shí)體完整性驗(yàn)證和參照完整性驗(yàn)證,從Spring IoC(inversion of control,控制反轉(zhuǎn))容器中取得驗(yàn)證規(guī)則并用Valang方式實(shí)現(xiàn)域完整性驗(yàn)證。
DOM是一種與瀏覽器、平臺(tái)、語言無關(guān),允許程序和腳本動(dòng)態(tài)的訪問和更新HTML與XML文件內(nèi)容、結(jié)構(gòu)和樣式的API[4]。DOM定義了標(biāo)準(zhǔn)的事件機(jī)制,目前大部分主流的瀏覽器實(shí)現(xiàn)了該事件機(jī)制[5]。在DOM標(biāo)準(zhǔn)下除了可以直接為DOM元素指定事件,也可以通過注冊(cè)的方式為DOM元素綁定事件[6]。本文客戶端驗(yàn)證方案的核心是通過獨(dú)立于表示層外的XML文檔來為表示層組件注冊(cè)on-Change事件。
客戶端驗(yàn)證方案的工作流程在時(shí)間上分為兩個(gè)階段。第一個(gè)是程序加載時(shí)的初始化階段:①初始化一個(gè)Form-Validator對(duì)象用來控制表單驗(yàn)證;②把XML靜態(tài)配置文件中的每個(gè)結(jié)點(diǎn)轉(zhuǎn)化成Validator對(duì)象添加到FormValidator中,為每個(gè)Validator對(duì)象的源目標(biāo)source注冊(cè)onChange監(jiān)聽事件。設(shè)置每個(gè)Validator對(duì)象的觸發(fā)者trigger為FormValidator;③在FormValidator中初始化一個(gè)bool類型數(shù)組voteMap,其中的元素對(duì)應(yīng)每個(gè)Validator是否驗(yàn)證成功的布爾值,全部初始化為false;④設(shè)置每個(gè)Validator對(duì)象驗(yàn)證成功和驗(yàn)證失敗的監(jiān)聽函數(shù),在這個(gè)監(jiān)聽函數(shù)中回調(diào)自定義的函數(shù)。
第二個(gè)階段是用戶開始向表單中錄入數(shù)據(jù):①用戶在表單中錄入數(shù)據(jù),觸發(fā)表單元素的onChange事件;②on-Change事件被FormValidator監(jiān)聽,F(xiàn)ormValidator中定義了對(duì)應(yīng)的監(jiān)聽函數(shù),并分派出CHANGE事件;③在初始化階段設(shè)定了Validator的觸發(fā)者為FormValidator,當(dāng)FormValidator派出CHANGE事件時(shí)會(huì)使Validator進(jìn)行表單項(xiàng)數(shù)據(jù)驗(yàn)證,并對(duì)驗(yàn)證的結(jié)果發(fā)出valid(驗(yàn)證合法事件)或invalid(驗(yàn)證不合法事件);④在FormValidator中設(shè)定了對(duì)Validator發(fā)出的valid和invalid事件的監(jiān)聽,然后做出相應(yīng)的回調(diào)事件。圖5是用戶在錄入時(shí),客戶端進(jìn)行的一次數(shù)據(jù)驗(yàn)證時(shí)序圖。
圖5 用戶輸入時(shí)驗(yàn)證的一次驗(yàn)證時(shí)序圖
AOP為開發(fā)者提供了另一種組織應(yīng)用程序結(jié)構(gòu)的方式,不再是面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP)中的類和接口,它主要的編程元素是切面(aspect),故它善于解決項(xiàng)目中的橫切性問題[7-8]。
目前,成熟的AOP框架比較多,它們都是針對(duì)不同的目的,基于不同的技術(shù)實(shí)現(xiàn)。但主流的有AspectJ、JBoss AOP、Spring AOP三個(gè)開源的框架[9]。本文采用Spring AOP框架實(shí)現(xiàn)服務(wù)器端數(shù)據(jù)驗(yàn)證。Spring AOP的基本術(shù)語見表1。
表1 Spring AOP基本術(shù)語
在Spring AOP應(yīng)用中,開發(fā)者只需進(jìn)行AOP的相關(guān)配置。本文涉及以下配置項(xiàng),切面類(Aspect):業(yè)務(wù)邏輯中橫切性的問題,如數(shù)據(jù)驗(yàn)證;切入點(diǎn)(PointCut):切面動(dòng)作切入到業(yè)務(wù)邏輯中的具體位置,通常是一串匹配符;連接點(diǎn)(JoinPoint):切入點(diǎn)地方的業(yè)務(wù)邏輯,在Spring中是業(yè)務(wù)邏輯中的某些函數(shù);通知(Advice):決定切面在連接點(diǎn)之前還是之后等。Spring AOP含有5種advice,Before、After、AfterReturning、AfterThrowing、Around,其中Around是所有通知類型中功能最為強(qiáng)大的,能夠全面控制連接點(diǎn),決定何時(shí)執(zhí)行連接點(diǎn)甚至短路連接點(diǎn),起到一個(gè)真正攔截器的作用[10]。數(shù)據(jù)驗(yàn)證如果不通過,那么業(yè)務(wù)邏輯就不會(huì)執(zhí)行,用Around通知可在此時(shí)短路業(yè)務(wù)邏輯。
Valang是一種支持聲明式的驗(yàn)證器。作為一種新型的驗(yàn)證工具,它提供了專門的驗(yàn)證語言,具有簡(jiǎn)單、易擴(kuò)展和可讀性高等特性。Valang除了可以應(yīng)用到Spring MVC(module-view-control,模型-視圖-控制)框架中,還可以對(duì)簡(jiǎn)單Java對(duì)象(plain old java objects,POJO)進(jìn)行驗(yàn)證[11]。Valang支持XML配置方式,可以通過Spring的IoC把驗(yàn)證類注入到環(huán)境中從而降低了耦合度[12]。為了提高驗(yàn)證的絕對(duì)安全性,本文采用Valang作為 “替補(bǔ)”,僅在客戶端失效的時(shí)候代替客戶端完成域完整性驗(yàn)證:用Valang驗(yàn)證語言定制表達(dá)式,并通過Spring依賴注入(depending injection,DI)方式注入到Bean標(biāo)記定義的驗(yàn)證器的Valang屬性中。驗(yàn)證器由Valang框架提供,開發(fā)者只需配置與POJO對(duì)應(yīng)的屬性約束。其約束性驗(yàn)證語言通俗易懂且與系統(tǒng)低耦合。
在客戶端驗(yàn)證方案中實(shí)現(xiàn)了驗(yàn)證核心類FormValidator和對(duì)數(shù)據(jù)進(jìn)行域完整性驗(yàn)證的Validator類。在使用的過程中分為如下3步:①編寫對(duì)應(yīng)一個(gè)表單的XML文件;②在客戶端頁面加載程序中初始化FormValidator對(duì)象,并加載XML文檔;③設(shè)定FormValidator對(duì)象的驗(yàn)證失敗和驗(yàn)證成功時(shí)的回調(diào)函數(shù),通常是設(shè)定 “提交按鈕”是否可用。其中②③步驟在不同的應(yīng)用中使用方式都一樣,所以客戶端驗(yàn)證方案的主要任務(wù)是編寫對(duì)應(yīng)表單的XML文件。XML文件的約束格式簡(jiǎn)單,能適應(yīng)表單的需求變化,靈活性強(qiáng)。
在服務(wù)器端的驗(yàn)證方案中,實(shí)現(xiàn)技術(shù)是Spring AOP和Valang技術(shù)。AOP技術(shù)跟驗(yàn)證模塊沒有直接的關(guān)系,它是把驗(yàn)證模塊徹底從業(yè)務(wù)邏輯中分離出來,降低系統(tǒng)模塊的耦合度。而驗(yàn)證模塊的代碼實(shí)現(xiàn)需要編程人員根據(jù)系統(tǒng)的特定邏輯具體實(shí)現(xiàn)。AOP配置核心代碼如下:
在上述配置代碼中,把AOP切面指定到類validate-Aop上,并采用validateAop類中的ValidateDatas方法來進(jìn)行數(shù)據(jù)驗(yàn)證,而AOP的橫切性關(guān)注點(diǎn)是checkData,即形如 “* bllimpl.*.add*(..)”和 “bllimpl.*.mod*(..)”形式的方法(bllimpl包下所有類中以add和mod開頭的方法)。在ValidateDatas方法中進(jìn)行編程人員自定義的驗(yàn)證邏輯。Valang方面以驗(yàn)證POJO為例,如類User(其只包括username,age一個(gè)String類型和一個(gè)int類型)為例,驗(yàn)證器bean的定義和驗(yàn)證規(guī)則注入。
最后在某個(gè)礦山企業(yè)的工程項(xiàng)目管理系統(tǒng)中采用此驗(yàn)證方案實(shí)現(xiàn)該系統(tǒng)的數(shù)據(jù)驗(yàn)證功能。以其中的付款憑證錄入界面為例,其實(shí)際運(yùn)行效果圖如圖6、圖7所示。在圖6和圖7需要驗(yàn)證的表單項(xiàng)中,憑證號(hào)按憑證的編寫規(guī)則進(jìn)行驗(yàn)證,預(yù)付款、結(jié)算款、扣材料、質(zhì)保金等都是金額。圖6為有非法輸入的界面,圖7為正確輸入的界面。
圖6 驗(yàn)證不成功時(shí)界面
該驗(yàn)證方案有較好的交互性。當(dāng)表單項(xiàng)的驗(yàn)證不成功時(shí),表單項(xiàng)的邊框變成紅色,能清晰的告訴用戶所輸入的數(shù)據(jù)是否合法。并且當(dāng)光標(biāo)落到輸入不合法的表單項(xiàng)時(shí)能提示用戶具體的錯(cuò)誤信息。界面的 “提交”按鈕最初以不可用的狀態(tài)呈現(xiàn)給用戶,直到用戶填寫的所有數(shù)據(jù)符合了驗(yàn)證規(guī)則,“提交”按鈕自動(dòng)轉(zhuǎn)成可用狀態(tài)。當(dāng)客戶端滿足驗(yàn)證進(jìn)行提交后,如果服務(wù)器端實(shí)體完整性驗(yàn)證和參照完整性驗(yàn)證不通過,以彈出框的形式提示客戶端用戶。經(jīng)該系統(tǒng)的投入運(yùn)行,確實(shí)提高了用戶交互的效率。
圖7 驗(yàn)證成功時(shí)界面
本文的數(shù)據(jù)驗(yàn)證方案完整地實(shí)現(xiàn)了所有的驗(yàn)證復(fù)雜度,與傳統(tǒng)只關(guān)注域完整性驗(yàn)證方案相比有較好的安全性和用戶體驗(yàn);采用分工合作的多場(chǎng)所驗(yàn)證方式,與傳統(tǒng)單一場(chǎng)所驗(yàn)證方式相比有較高的效率。實(shí)現(xiàn)方式上分別在客戶端采用事件監(jiān)聽機(jī)制和服務(wù)器端采用Aop和Valang技術(shù),與傳統(tǒng)AOP數(shù)據(jù)驗(yàn)證方案相比更簡(jiǎn)化數(shù)據(jù)驗(yàn)證模塊。該方案可以應(yīng)用到所有以服務(wù)器/客戶端模式的管理系統(tǒng)中。但不足之處在于AOP和Valang技術(shù)依賴Java的Spring框架,服務(wù)器端實(shí)現(xiàn)方式只能在Java環(huán)境中實(shí)現(xiàn)。
[1]YANG Tiejun,NIU Qinzhou,HUANG Lin,et al.Method of heterogeneous data validation based on interface definition[J].Computer Engineering,2009,35(24):66-68(in Chinese).[楊鐵軍,牛秦洲,黃琳,等.基于接口定義的異構(gòu)數(shù)據(jù)有效性驗(yàn)證方法[J].計(jì)算機(jī)工程,2009,35(24):66-68.]
[2]ZHAO Guangli.Research and implementation of aspect-oriented data validation component[J].Computer Engineering and Design,2010,31(1):206-209(in Chinese).[趙廣利.面向切面的數(shù)據(jù)驗(yàn)證組件研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(1):206-209.]
[3]CHENG Man,ZHAO Binzhi,WANG Tianli,et al.Research on data validation with Valang[J].Computer Engineering and Design,2009,30(13):3251-3253(in Chinese).[程滿,趙賓植,王天理,等.基于Valang技術(shù)的數(shù)據(jù)驗(yàn)證機(jī)制研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(13):3251-3253.]
[4]ZHANG Ruixue,SONG Mingqiu,GONG Yanlei,et al.Parsing DOM tree reversely and extracting web main page information[J].Computer Science,2011,38(4):213-215(in Chinese).[張瑞雪,宋明秋,公衍磊,等.逆序解析DOM樹及網(wǎng)頁正文信息提?。跩].計(jì)算機(jī)科學(xué),2011,38(4):213-215.]
[5]Patrick O Bobbie,Yiming Ji.Modeling and synthesizing eventdriven simulators from collaborating uml statecharts[C].10th IASTED International Conference on Software Engineering and Applications,2006:1-7.
[6]GUO Hongyan,YANG Bo,JIN Beihong,et al.Research on high performance DOM implementation[J].Computer Science,2006,33(6):274-277(in Chinese).[郭紅艷,楊波,金蓓弘,等.高效DOM實(shí)現(xiàn)的技術(shù)研究[J].計(jì)算機(jī)科學(xué),2006,33(6):274-277.]
[7]ZHANG Xian,DONG Wei,QI Zhichang,et al.Conflicts detection in runtime verification based on AOP[J].Journal of Software,2011,22(6):1224-1235(in Chinese).[張獻(xiàn),董威,齊治昌,等.基于AOP的運(yùn)行時(shí)驗(yàn)證中的沖突檢測(cè)[J].軟件學(xué)報(bào),2011,22(6):1224-1235.]
[8]SHAO Fudong,LIU Xiaodong,YANG Baoming,et al.Research and implementation of program condition visualization based on AOP[J].Journal of Computer Applications,2006,26(10):2483-2485(in Chinese).[邵付東,劉曉東,楊保明,等.基于AOP的程序狀態(tài)可視化方法研究與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2006,26(10):2483-2485.]
[9]ZHANG Yingjie,LIU Wanjun.Research on the application of Spring AOP in the security authentication of J2EE systems[J].Computer Engineering & Science,2008,30(8):137-138(in Chinese).[張英捷,劉萬軍.Spring AOP技術(shù)在J2EE系統(tǒng)安全性驗(yàn)證中的應(yīng)用研究[J].計(jì)算機(jī)工程與科學(xué),2008,30(8):137-138.]
[10]Eric Tanter,Rodolfo Toledo,Guillaume Pothier,et al.Flexible metaprogramming and AOP in Java[J].Science of Computer Programming,2008,72(1/2):22-30.
[11]Pasquale Arpaia,Mario Luca Bernardi.An aspect-oriented programming-based approach to software development for fault detection in measurement systems[J].Computer Standards and Interfaces,2010,32(3):141-152.
[12]ZHAO Yanni,WANG Yinghui,LEI Yu,et al.Research and implement of software framework based on IOC/AOP[J].Computer Engineering and Applications,2008,44(29):92-95(in Chinese).[趙艷妮,王映輝,雷宇,等.一種基于AOP/IOC的軟件框架研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2008,44(29):92-95.]