一種JavaScript程序中方面的織入方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種JavaScript程序中方面的織入方法及系統(tǒng)。其中,該方法包括:創(chuàng)建多線程執(zhí)行環(huán)境;開啟一條線程,執(zhí)行AOP對(duì)象里的通知類型方法,判斷預(yù)先聲明的目標(biāo)連接點(diǎn)是否加載;若加載,開啟另一條線程,用臨時(shí)變量保存目標(biāo)連接點(diǎn),按照通知類型方法將臨時(shí)變量和接收到的目標(biāo)連接點(diǎn)的通知方法寫入目標(biāo)連接點(diǎn),完成方面的織入;若沒有加載,繼續(xù)判斷目標(biāo)連接點(diǎn)是否加載。本發(fā)明先在單線程的JavaScript運(yùn)行環(huán)境中模擬出多線程運(yùn)行環(huán)境,再利用在多線程環(huán)境中開啟一個(gè)對(duì)象監(jiān)聽線程來監(jiān)控對(duì)象的加載,在對(duì)象加載之后立刻對(duì)其織入方面,避免了現(xiàn)有技術(shù)中必須在目標(biāo)連接點(diǎn)加載到對(duì)象之后才能執(zhí)行方面的聲明,從而解決了目標(biāo)連接點(diǎn)織入方面失敗的問題。
【專利說明】
-種JavaScr i pt程序中方面的織入方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001] 本發(fā)明設(shè)及計(jì)算機(jī)技術(shù)領(lǐng)域,,尤其設(shè)及一種化vaScript程序中方面的織入方法 及系統(tǒng)。
【背景技術(shù)】
[0002] 化vaScript是一種專為網(wǎng)頁交互而設(shè)計(jì)的腳本語言,在幾乎所有的Web應(yīng)用中都 得到了廣泛的應(yīng)用。隨著Web應(yīng)用技術(shù)的日益增長,程序的復(fù)雜度越來越高,運(yùn)便使得其中 的化vaScript程序的開發(fā)和維護(hù)越來越困難。作為Web的一個(gè)重要組成部分,JavaScript的 重要性是不言而喻的。人們通常利用〇〇P(〇bject Oriented Programming,面向?qū)ο缶幊蹋?去簡化化vaScript的開發(fā)和維護(hù)過程,但是由于其局限性,大量功能相同的冗余代碼也增 加了化vaScript的開發(fā)和維護(hù)成本。
[0003] A0P(Aspect Oriented Programming,面向切面編程)將橫切關(guān)注點(diǎn)封裝在方面 (Aspect)中,從而實(shí)現(xiàn)了橫切關(guān)注點(diǎn)的統(tǒng)一管理和維護(hù),進(jìn)而降低了系統(tǒng)開發(fā)的復(fù)雜度。一 個(gè)方面包含切入點(diǎn)(Pointcut)和通知(Advice)兩個(gè)部分,其中切入點(diǎn)定義的是某一個(gè)通知 該何時(shí)執(zhí)行的一組連接點(diǎn)(Join巧oint),而連接點(diǎn)則表示一個(gè)程序執(zhí)行過程中的一個(gè)可預(yù) 見的點(diǎn)。對(duì)目標(biāo)連接點(diǎn)織入方面之后,當(dāng)其執(zhí)行時(shí),織入的方面中的通知也會(huì)相應(yīng)地被執(zhí) 行。因此,將A0P應(yīng)用到化vaScript的開發(fā)和維護(hù)有著十分重要的意義。
[0004] 目前,很多學(xué)者實(shí)現(xiàn)了輕量級(jí)的面向方面的化vaScript框架,而AspectJS是其中 較為成熟且較為全面的一個(gè)。AspectJS是一個(gè)對(duì)方法調(diào)用攔截有完全控制力的面向方面的 化vaScript組件,其依據(jù)化vaScript語言的動(dòng)態(tài)性特性,利用方法調(diào)用攔截(MCI)技術(shù)在調(diào) 用目標(biāo)函數(shù)前后執(zhí)行其它方法,運(yùn)種對(duì)調(diào)用者透明的聚合函數(shù)調(diào)用的方法就是AspectJS實(shí) 現(xiàn)A0P的基本原理。AspectJS為被攔截的方法調(diào)用提供了完全的控制和完善的管理,使面向 方面的化vaScript編程變得容易簡單。但是,該框架對(duì)于方面的聲明必須在連接點(diǎn)目標(biāo)的 聲明之后,否則會(huì)因?yàn)榛痸aScript程序執(zhí)行順序造成編織器找不到目標(biāo)連接點(diǎn),而導(dǎo)致方 面織入的失敗。
[0005] A0JS是一個(gè)不同于AspectJS的面向方面的化vaScript框架,與其最大的不同是 A0JS采用XML文件去定義方面,然后通過一個(gè)代理服務(wù)器去執(zhí)行方面的織入。W往的面向方 面的化vaScript框架最大的缺點(diǎn)就是方面與源代碼沒有徹底分離,運(yùn)樣做的結(jié)果就是方面 織入到源代碼時(shí),可能會(huì)引起一些程序可靠性的問題。而A0JS將方面與源代碼完全分離,通 過代理服務(wù)器在運(yùn)行時(shí)將方面織入源代碼,消除了定義方面對(duì)源代碼的入侵性。但是,由于 A0JS完全拋棄了化vaScript本身的語言特性的優(yōu)點(diǎn),利用外部程序按預(yù)先定義的XML文件 去修改Web應(yīng)用中的化vaScript程序,運(yùn)便使得對(duì)Web項(xiàng)目應(yīng)用A0P變得困難復(fù)雜,難W測 試。同時(shí),A0JS需要的代理服務(wù)器也增加了 Web應(yīng)用的代價(jià)。
[0006] AspectScript是一種采用高階編程和動(dòng)態(tài)性為其設(shè)計(jì)核屯、的成熟的面向方面的 化vaScript框架。依據(jù)化vaScript語言的動(dòng)態(tài)性特性,AspectScript支持方面的動(dòng)態(tài)調(diào)度。 同時(shí),由于AspectScript充分利用了高階編程的優(yōu)勢,使得對(duì)于切點(diǎn)和方面的定義更加精 確,而且結(jié)合作用域策略,因此AspectScript提供了對(duì)于方面的精確控制。最后, AspectScript不僅僅支持隱式連接點(diǎn),而且還提供了準(zhǔn)確定義用戶自定義連接點(diǎn)的可能, 從而為框架提供了豐富的擴(kuò)展的可能性。AspectScript相對(duì)于Aspect JS來說,功能更加全 面豐富,但是其仍然具有和AspectJS-樣的不足,即目標(biāo)連接點(diǎn)和方面的聲明有嚴(yán)格的執(zhí) 行的先后順序,從而在某些情況下會(huì)導(dǎo)致目標(biāo)連接點(diǎn)織入方面失敗。
[0007] W上Ξ種面向方面的化vaScript編程實(shí)現(xiàn)主要通過靜態(tài)和動(dòng)態(tài)兩種方式去實(shí)現(xiàn)。 由于化vaScript是解釋型語言,不需要經(jīng)過編譯器進(jìn)行編譯,因此靜態(tài)織入方面需要借助 外部程序依據(jù)事先定義好的方面文件去修改源文件,A0JS就是通過運(yùn)種方法實(shí)現(xiàn)的面向方 面的化vaScript編程。該框架將方面都定義在XML文件中,然后使用另外的程序去解析運(yùn)些 XML文件,將定義在其中的方面編織入JavaScript程序中。但是運(yùn)樣的方式完全放棄了 化vaScript語言動(dòng)態(tài)性的特點(diǎn),實(shí)現(xiàn)也十分復(fù)雜,因此大多數(shù)的實(shí)現(xiàn)都是利用化vaScript 的語言特性去動(dòng)態(tài)地完成方面的織入。而類似于AspectJS和AspectScript運(yùn)樣的實(shí)現(xiàn)在對(duì) 于連接點(diǎn)加載和方面織入的順序上考慮的不夠全面,對(duì)于面向方面的化vaScript編程的實(shí) 現(xiàn)也是不夠全面的,因而可能會(huì)導(dǎo)致目標(biāo)連接點(diǎn)織入方面的失敗。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明實(shí)施例通過提供一種化vaScript程序中方面的織入方法及系統(tǒng),解決了現(xiàn) 有技術(shù)中目標(biāo)連接點(diǎn)和方面的聲明必須有嚴(yán)格的執(zhí)行的先后順序的技術(shù)問題,實(shí)現(xiàn)了避免 目標(biāo)連接點(diǎn)織入方面失敗的技術(shù)效果。
[0009] 本發(fā)明實(shí)施例提供了一種化vaScript程序中方面的織入方法,包括:
[0010] 創(chuàng)建多線程執(zhí)行環(huán)境;
[0011] 開啟一條線程,執(zhí)行A0P對(duì)象里的通知類型方法,判斷預(yù)先聲明的目標(biāo)連接點(diǎn)是否 加載;
[0012] 若加載,開啟另一條線程,用臨時(shí)變量保存所述目標(biāo)連接點(diǎn),按照通知類型方法將 所述臨時(shí)變量和接收到的所述目標(biāo)連接點(diǎn)的通知方法寫入所述目標(biāo)連接點(diǎn),完成方面的織 入;
[0013] 若沒有加載,繼續(xù)判斷所述目標(biāo)連接點(diǎn)是否加載。
[0014] 進(jìn)一步地,所述開啟一條線程,執(zhí)行A0P對(duì)象里的通知類型方法,判斷預(yù)先聲明的 目標(biāo)連接點(diǎn)是否加載,具體包括:
[0015] 創(chuàng)建A0P對(duì)象;
[0016] 在所述A0P對(duì)象中定義至少3個(gè)所述通知類型方法;
[0017] 在各所述通知類型方法中存入所述目標(biāo)連接點(diǎn)及其通知方法;
[0018] 在各所述通知類型方法中,分別判斷所述目標(biāo)連接點(diǎn)是否加載;
[0019] 所述若加載,開啟另一條線程,用臨時(shí)變量保存所述目標(biāo)連接點(diǎn),具體包括:
[0020] 若所述目標(biāo)連接點(diǎn)在任一個(gè)所述通知類型方法中加載,則開啟另一條線程,用所 述臨時(shí)變量保存所述目標(biāo)連接點(diǎn)。
[0021] 進(jìn)一步地,所述判斷所述目標(biāo)連接點(diǎn)是否加載,具體包括:
[0022] 判斷所述目標(biāo)連接點(diǎn)是否加載到相應(yīng)的執(zhí)行環(huán)境中;
[002引若是,則說明所述目標(biāo)連接點(diǎn)加載。
[0024] 進(jìn)一步地,所述通知類型方法包括:前置通知、后置通知和包圍通知。
[0025] 本發(fā)明提供的化vaScript程序中方面的織入系統(tǒng),包括:
[0026] 多線程創(chuàng)建模塊,用于創(chuàng)建多線程執(zhí)行環(huán)境;
[0027] 判斷模塊,用于開啟一條線程,執(zhí)行A0P對(duì)象里的通知類型方法,判斷預(yù)先聲明的 目標(biāo)連接點(diǎn)是否加載;
[0028] 方面織入模塊,用于若所述判斷模塊的判斷結(jié)果為加載,開啟另一條線程,用臨時(shí) 變量保存所述目標(biāo)連接點(diǎn),按照通知類型方法將所述臨時(shí)變量和接收到的所述目標(biāo)連接點(diǎn) 的通知方法寫入所述目標(biāo)連接點(diǎn),完成方面的織入。
[0029] 進(jìn)一步地,所述判斷模塊,具體包括:
[0030] A0P對(duì)象創(chuàng)建單元,用于創(chuàng)建A0P對(duì)象;
[0031] 通知類型創(chuàng)建單元,用于在所述A0P對(duì)象中定義至少3個(gè)所述通知類型方法;
[0032] 信息接收單元,用于在各所述通知類型方法中存入所述目標(biāo)連接點(diǎn)及其通知方 法;
[0033] 判斷執(zhí)行單元,用于在各所述通知類型方法中,分別判斷所述目標(biāo)連接點(diǎn)是否加 載;
[0034] 所述方面織入模塊,具體用于若所述判斷執(zhí)行單元的判斷結(jié)果為所述目標(biāo)連接點(diǎn) 在任一個(gè)所述通知類型方法中加載,則開啟另一條線程,用所述臨時(shí)變量保存所述目標(biāo)連 接點(diǎn),按照通知類型方法將所述臨時(shí)變量和接收到的所述目標(biāo)連接點(diǎn)的通知方法寫入所述 目標(biāo)連接點(diǎn),完成方面的織入。
[0035] 進(jìn)一步地,所述判斷執(zhí)行單元,具體用于在各所述通知類型方法中,分別判斷所述 目標(biāo)連接點(diǎn)是否加載到相應(yīng)的執(zhí)行環(huán)境中;
[0036] 若是,則說明所述目標(biāo)連接點(diǎn)在該通知類型中加載。
[0037] 進(jìn)一步地,所述通知類型方法包括:前置通知、后置通知和包圍通知。
[0038] 本發(fā)明實(shí)施例中提供的一個(gè)或多個(gè)技術(shù)方案,至少具有如下技術(shù)效果或優(yōu)點(diǎn):
[0039] 先在單線程的化vaScript運(yùn)行環(huán)境中模擬出多線程運(yùn)行環(huán)境,再利用在多線程環(huán) 境中開啟一個(gè)對(duì)象監(jiān)聽線程來監(jiān)控對(duì)象的加載,在對(duì)象加載之后立刻對(duì)其織入方面,避免 了現(xiàn)有技術(shù)中必須在目標(biāo)連接點(diǎn)加載到對(duì)象之后才能執(zhí)行方面的聲明,從而解決了目標(biāo)連 接點(diǎn)織入方面失敗的問題。
【附圖說明】
[0040] 圖1為本發(fā)明實(shí)施例一提供的化vaScript程序中方面的織入方法的流程圖;
[0041] 圖2為本發(fā)明實(shí)施例二提供的化vaScript程序中方面的織入系統(tǒng)的模塊圖。
【具體實(shí)施方式】
[0042] 本發(fā)明實(shí)施例通過提供一種化vaScript程序中方面的織入方法及系統(tǒng),解決了現(xiàn) 有技術(shù)中目標(biāo)連接點(diǎn)和方面的聲明必須有嚴(yán)格的執(zhí)行的先后順序的技術(shù)問題,實(shí)現(xiàn)了避免 目標(biāo)連接點(diǎn)織入方面失敗的技術(shù)效果。
[0043] 本發(fā)明實(shí)施例中的技術(shù)方案為解決上述技術(shù)問題,總體思路如下:
[0044] 先在單線程的化vaScript運(yùn)行環(huán)境中模擬出多線程運(yùn)行環(huán)境,再利用在多線程環(huán) 境中開啟一個(gè)對(duì)象監(jiān)聽線程來監(jiān)控對(duì)象的加載,在對(duì)象加載之后立刻對(duì)其織入方面,避免 了現(xiàn)有技術(shù)中必須在目標(biāo)連接點(diǎn)加載到對(duì)象之后才能執(zhí)行方面的聲明,從而解決了目標(biāo)連 接點(diǎn)織入方面失敗的問題。
[0045] 為了更好地理解上述技術(shù)方案,下面將結(jié)合說明書附圖W及具體的實(shí)施方式對(duì)上 述技術(shù)方案進(jìn)行詳細(xì)的說明。
[0046] 實(shí)施例一
[0047] 參見圖1,本發(fā)明實(shí)施例提供的化vaScript程序中方面的織入方法,包括:
[004引步驟S110:創(chuàng)建多線程執(zhí)行環(huán)境;
[0049] 對(duì)本步驟進(jìn)行說明,首先引入Con州rrent. T虹ead. js庫,并準(zhǔn)備為各A0P對(duì)象的通 知調(diào)用創(chuàng)建一個(gè)監(jiān)控線程,并給該通知調(diào)用傳入連接點(diǎn)和通知方法。
[0050] 步驟S120:開啟一條線程,執(zhí)行A0P對(duì)象里的通知類型方法,判斷預(yù)先聲明的目標(biāo) 連接點(diǎn)是否加載;
[0051] 步驟S130:若加載,開啟另一條線程,用臨時(shí)變量保存目標(biāo)連接點(diǎn),按照通知類型 方法將臨時(shí)變量和接收到的目標(biāo)連接點(diǎn)的通知方法寫入目標(biāo)連接點(diǎn),完成方面的織入;
[0052] 若沒有加載,繼續(xù)判斷目標(biāo)連接點(diǎn)是否加載。
[0053] 具體地,對(duì)步驟S120進(jìn)行具體的說明,包括:
[0054] 創(chuàng)建A0P對(duì)象;
[0055]在本實(shí)施例中,默認(rèn)所有連接點(diǎn)的通知方法均為window的屬性,用W創(chuàng)建各類通 知的A0P對(duì)象的基本代碼實(shí)現(xiàn)如下:
[0化6]
[0化7]
[005引在A0P對(duì)象中定義至少3個(gè)通知類型方法;
[0059] 在本實(shí)施例中,通知類型方法包括:前置通知、后置通知和包圍通知,即before、 曰f ter 和曰 round 〇
[0060] 在各通知類型方法中存入目標(biāo)連接點(diǎn)及其通知方法;
[0061 ]在各通知類型方法中,分別判斷目標(biāo)連接點(diǎn)是否加載;
[0062] 在本實(shí)施例中,判斷目標(biāo)連接點(diǎn)是否加載,具體包括:
[0063] 判斷目標(biāo)連接點(diǎn)是否加載到相應(yīng)的執(zhí)行環(huán)境中;
[0064] 若是,則說明目標(biāo)連接點(diǎn)加載。
[0065] 具體地,當(dāng)目標(biāo)連接點(diǎn)加載到window對(duì)象上面后,調(diào)用方面編織器weaver。若還未 加載,則在當(dāng)前線程中繼續(xù)執(zhí)行監(jiān)控。聲明一個(gè)方面的代碼如下:
[0066]
[0067] weaver將連接點(diǎn)目標(biāo)保存在一個(gè)temp變量中,然后按照通知的類型將通知函數(shù)與 temp-起封裝到aspect方法中,最后將aspect方法賦值給連接點(diǎn)目標(biāo),完成方面的織入。
[0068] weaver方法的基本功能實(shí)現(xiàn)如下:
[0069]
[0070]
[0071] 在運(yùn)種情況下,步驟S130中的若加載,開啟另一條線程,用臨時(shí)變量保存目標(biāo)連接 點(diǎn),具體包括:
[0072] 若目標(biāo)連接點(diǎn)在任一個(gè)通知類型方法中加載,則開啟另一條線程,用臨時(shí)變量保 存目標(biāo)連接點(diǎn)。
[0073] 實(shí)施例二
[0074] 參見圖2,本發(fā)明實(shí)施例提供的化vaScript程序中方面的織入系統(tǒng),包括:
[0075] 多線程創(chuàng)建模塊100,用于創(chuàng)建多線程執(zhí)行環(huán)境;
[0076] 在本實(shí)施例中,多線程創(chuàng)建模塊100,具體用于引入Concurrent.Thread, js庫,并 準(zhǔn)備為各ΑΟΡ對(duì)象的通知調(diào)用創(chuàng)建一個(gè)監(jiān)控線程,并給該通知調(diào)用傳入連接點(diǎn)和通知方法。
[0077] 判斷模塊200,用于開啟一條線程,執(zhí)行Α0Ρ對(duì)象里的通知類型方法,判斷預(yù)先聲明 的目標(biāo)連接點(diǎn)是否加載;
[0078] 方面織入模塊300,用于若判斷模塊200的判斷結(jié)果為加載,開啟另一條線程,用臨 時(shí)變量保存目標(biāo)連接點(diǎn),按照通知類型方法將臨時(shí)變量和接收到的目標(biāo)連接點(diǎn)的通知方法 寫入目標(biāo)連接點(diǎn),完成方面的織入。
[0079] 在本實(shí)施例中,判斷模塊200,具體包括:
[0080] Α0Ρ對(duì)象創(chuàng)建單元,用于創(chuàng)建Α0Ρ對(duì)象;
[0081 ]通知類型創(chuàng)建單元,用于在Α0Ρ對(duì)象中定義至少3個(gè)通知類型方法;
[0082] 在本實(shí)施例中,通知類型方法包括:前置通知、后置通知和包圍通知,即before、 曰f ter 和曰 round 〇
[0083] 信息接收單元,用于在各通知類型方法中存入目標(biāo)連接點(diǎn)及其通知方法;
[0084] 判斷執(zhí)行單元,用于在各通知類型方法中,分別判斷目標(biāo)連接點(diǎn)是否加載;
[0085] 在本實(shí)施例中,判斷執(zhí)行單元,具體用于在各通知類型方法中,分別判斷目標(biāo)連接 點(diǎn)是否加載到相應(yīng)的執(zhí)行環(huán)境中;
[0086] 若是,則說明目標(biāo)連接點(diǎn)在該通知類型中加載。
[0087] 在運(yùn)種情況下,方面織入模塊300,具體用于若判斷執(zhí)行單元的判斷結(jié)果為目標(biāo)連 接點(diǎn)在任一個(gè)通知類型方法中加載,則開啟另一條線程,用臨時(shí)變量保存目標(biāo)連接點(diǎn),按照 通知類型方法將臨時(shí)變量和接收到的目標(biāo)連接點(diǎn)的通知方法寫入目標(biāo)連接點(diǎn),完成方面的 織入。
[0088] 【技術(shù)效果】
[0089] 先在單線程的化vaScript運(yùn)行環(huán)境中模擬出多線程運(yùn)行環(huán)境,再利用在多線程環(huán) 境中開啟一個(gè)對(duì)象監(jiān)聽線程來監(jiān)控對(duì)象的加載,在對(duì)象加載之后立刻對(duì)其織入方面,避免 了現(xiàn)有技術(shù)中必須在目標(biāo)連接點(diǎn)加載到對(duì)象之后才能執(zhí)行方面的聲明,從而解決了目標(biāo)連 接點(diǎn)織入方面失敗的問題。
[0090] 本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序 產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí) 施例的形式。而且,本發(fā)明可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī) 可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn) 品的形式。
[0091] 本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程 圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流 程和/或方框、W及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻\(yùn)些計(jì)算機(jī)程序 指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器W產(chǎn) 生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí) 現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
[0092] 運(yùn)些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備W特 定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指 令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或 多個(gè)方框中指定的功能。
[0093] 運(yùn)些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì) 算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟W產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或 其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一 個(gè)方框或多個(gè)方框中指定的功能的步驟。
[0094] 盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造 性概念,則可對(duì)運(yùn)些實(shí)施例作出另外的變更和修改。所W,所附權(quán)利要求意欲解釋為包括優(yōu) 選實(shí)施例W及落入本發(fā)明范圍的所有變更和修改。
[0095] 顯然,本領(lǐng)域的技術(shù)人員可W對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精 神和范圍。運(yùn)樣,倘若本發(fā)明的運(yùn)些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍 之內(nèi),則本發(fā)明也意圖包含運(yùn)些改動(dòng)和變型在內(nèi)。
【主權(quán)項(xiàng)】
1. 一種JavaScript程序中方面的織入方法,其特征在于,包括: 創(chuàng)建多線程執(zhí)行環(huán)境; 開啟一條線程,執(zhí)行AOP對(duì)象里的通知類型方法,判斷預(yù)先聲明的目標(biāo)連接點(diǎn)是否加 載; 若加載,開啟另一條線程,用臨時(shí)變量保存所述目標(biāo)連接點(diǎn),按照通知類型方法將所述 臨時(shí)變量和接收到的所述目標(biāo)連接點(diǎn)的通知方法寫入所述目標(biāo)連接點(diǎn),完成方面的織入; 若沒有加載,繼續(xù)判斷所述目標(biāo)連接點(diǎn)是否加載。2. 如權(quán)利要求1所述的方法,其特征在于,所述開啟一條線程,執(zhí)行AOP對(duì)象里的通知類 型方法,判斷預(yù)先聲明的目標(biāo)連接點(diǎn)是否加載,具體包括: 創(chuàng)建AOP對(duì)象; 在所述AOP對(duì)象中定義至少3個(gè)所述通知類型方法; 在各所述通知類型方法中存入所述目標(biāo)連接點(diǎn)及其通知方法; 在各所述通知類型方法中,分別判斷所述目標(biāo)連接點(diǎn)是否加載; 所述若加載,開啟另一條線程,用臨時(shí)變量保存所述目標(biāo)連接點(diǎn),具體包括: 若所述目標(biāo)連接點(diǎn)在任一個(gè)所述通知類型方法中加載,則開啟另一條線程,用所述臨 時(shí)變量保存所述目標(biāo)連接點(diǎn)。3. 如權(quán)利要求2所述的方法,其特征在于,所述判斷所述目標(biāo)連接點(diǎn)是否加載,具體包 括: 判斷所述目標(biāo)連接點(diǎn)是否加載到相應(yīng)的執(zhí)行環(huán)境中; 若是,則說明所述目標(biāo)連接點(diǎn)加載。4. 如權(quán)利要求2或3所述的方法,其特征在于,所述通知類型方法包括:前置通知、后置 通知和包圍通知。5. -種JavaScript程序中方面的織入系統(tǒng),其特征在于,包括: 多線程創(chuàng)建模塊,用于創(chuàng)建多線程執(zhí)行環(huán)境; 判斷模塊,用于開啟一條線程,執(zhí)行AOP對(duì)象里的通知類型方法,判斷預(yù)先聲明的目標(biāo) 連接點(diǎn)是否加載; 方面織入模塊,用于若所述判斷模塊的判斷結(jié)果為加載,開啟另一條線程,用臨時(shí)變量 保存所述目標(biāo)連接點(diǎn),按照通知類型方法將所述臨時(shí)變量和接收到的所述目標(biāo)連接點(diǎn)的通 知方法寫入所述目標(biāo)連接點(diǎn),完成方面的織入。6. 如權(quán)利要求5所述的系統(tǒng),其特征在于,所述判斷模塊,具體包括: AOP對(duì)象創(chuàng)建單元,用于創(chuàng)建AOP對(duì)象; 通知類型創(chuàng)建單元,用于在所述AOP對(duì)象中定義至少3個(gè)所述通知類型方法; 信息接收單元,用于在各所述通知類型方法中存入所述目標(biāo)連接點(diǎn)及其通知方法; 判斷執(zhí)行單元,用于在各所述通知類型方法中,分別判斷所述目標(biāo)連接點(diǎn)是否加載; 所述方面織入模塊,具體用于若所述判斷執(zhí)行單元的判斷結(jié)果為所述目標(biāo)連接點(diǎn)在任 一個(gè)所述通知類型方法中加載,則開啟另一條線程,用所述臨時(shí)變量保存所述目標(biāo)連接點(diǎn), 按照通知類型方法將所述臨時(shí)變量和接收到的所述目標(biāo)連接點(diǎn)的通知方法寫入所述目標(biāo) 連接點(diǎn),完成方面的織入。7. 如權(quán)利要求6所述的系統(tǒng),其特征在于,所述判斷執(zhí)行單元,具體用于在各所述通知 類型方法中,分別判斷所述目標(biāo)連接點(diǎn)是否加載到相應(yīng)的執(zhí)行環(huán)境中; 若是,則說明所述目標(biāo)連接點(diǎn)在該通知類型中加載。8.如權(quán)利要求6或7所述的系統(tǒng),其特征在于,所述通知類型方法包括:前置通知、后置 通知和包圍通知。
【文檔編號(hào)】G06F9/445GK105824665SQ201610142721
【公開日】2016年8月3日
【申請(qǐng)日】2016年3月14日
【發(fā)明人】黃文豪, 何成萬
【申請(qǐng)人】武漢工程大學(xué)