專利名稱:一種字節(jié)碼織入方法、裝置及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及一種字節(jié)碼織入的技術(shù),具體涉及一種使用在Java程序運(yùn)行時(shí)動(dòng)態(tài) 織入字節(jié)碼的技術(shù)。
背景技術(shù):
Java字節(jié)碼(bytecode)是Java虛擬機(jī)可執(zhí)行的指令集的一種表現(xiàn)形式,Java編 譯器把Java源代碼編譯成字節(jié)碼,Java跨平臺(tái)是基于相同的字節(jié)碼規(guī)范實(shí)現(xiàn)不同平臺(tái)的 虛擬機(jī),Java程序編譯成字節(jié)碼后就可以在不同的平臺(tái)執(zhí)行。ASM是一套Java字節(jié)碼生成器,它可以動(dòng)態(tài)生成二進(jìn)制格式的stub類(lèi)或其他代理 類(lèi),或者動(dòng)態(tài)的修改類(lèi)字節(jié)碼文件。為了能夠讓由開(kāi)發(fā)人員已經(jīng)開(kāi)發(fā)好并打包完成的程序在運(yùn)行時(shí)擁有某些特殊的、 在打包之前沒(méi)有的功能,比如實(shí)現(xiàn)面向切面編程(AOP Aspect Oriented Programming),或 者開(kāi)發(fā)人員開(kāi)發(fā)的程序需要特定容器支持,則必須要對(duì)字節(jié)碼使用ASM進(jìn)行重新織入。這 個(gè)過(guò)程一般在編譯完成之后,程序打包之前完成。發(fā)明人經(jīng)過(guò)研究發(fā)現(xiàn),在源字節(jié)碼文件上進(jìn)行新的字節(jié)碼織入后,字節(jié)碼文件中 的行數(shù)與源程序文件行數(shù)不對(duì)應(yīng),導(dǎo)致程序調(diào)試時(shí)執(zhí)行代碼的行數(shù)與源代碼錯(cuò)位,導(dǎo)致程 序無(wú)法調(diào)試。
發(fā)明內(nèi)容
為解決上述技術(shù)問(wèn)題,本申請(qǐng)實(shí)施例提供一種字節(jié)碼織入方法、裝置及系統(tǒng),在不 改變?cè)醋止?jié)碼文件的前提下,為源文件字節(jié)碼織入子類(lèi)字節(jié)碼文件,程序運(yùn)行時(shí),調(diào)用自定 義類(lèi)加載容器,加載織入的子類(lèi)字節(jié)碼文件,通過(guò)對(duì)子類(lèi)字節(jié)碼文件的運(yùn)行,實(shí)現(xiàn)需要織入 的程序功能。技術(shù)方案如下一種字節(jié)碼織入方法,包括監(jiān)聽(tīng)程序部署事件,獲取事件源的字節(jié)碼織入指令及事件源的字節(jié)碼文件;依據(jù)所述字節(jié)碼織入指令織入事件源的子類(lèi)字節(jié)碼文件;對(duì)所述子類(lèi)字節(jié)碼文件進(jìn)行緩存,并建立所述子類(lèi)字節(jié)碼文件與事件源字節(jié)碼文 件的對(duì)應(yīng)關(guān)系;當(dāng)啟動(dòng)或激活程序時(shí),根據(jù)所述對(duì)應(yīng)關(guān)系應(yīng)用自定義類(lèi)加載器對(duì)織入的子類(lèi)字節(jié) 碼文件進(jìn)行加載,實(shí)現(xiàn)需要織入的程序功能。上述的織入方法,優(yōu)選的,所述字節(jié)碼織入指令中包含織入字節(jié)碼實(shí)現(xiàn)程序功能 的功能信息。上述的織入方法,優(yōu)選的,所述應(yīng)用自定義類(lèi)加載器對(duì)織入的子類(lèi)字節(jié)碼文件進(jìn) 行加載的過(guò)程具體為判斷需要加載的子類(lèi)字節(jié)碼文件所在類(lèi)的歸屬類(lèi)型;
3
根據(jù)所述歸屬類(lèi)型選擇與其相對(duì)應(yīng)的類(lèi)加載方式;應(yīng)用自定義類(lèi)加載器根據(jù)所述類(lèi)加載方式對(duì)所述類(lèi)中的子類(lèi)字節(jié)碼文件進(jìn)行加載。一種字節(jié)碼織入裝置,包括事件監(jiān)聽(tīng)獲取單元、字節(jié)碼織入單元、緩存單元和加 載單元;其中所述事件監(jiān)聽(tīng)獲取單元用于監(jiān)聽(tīng)程序部署事件,獲取事件源的字節(jié)碼織入 指令及事件源的字節(jié)碼文件;所述字節(jié)碼織入單元用于依據(jù)所述事件監(jiān)聽(tīng)獲取單元獲取的事件源的字節(jié)碼織 入指令織入事件源的子類(lèi)字節(jié)碼文件;所述緩存單元用于對(duì)所述字節(jié)碼織入單元織入的子類(lèi)字節(jié)碼文件進(jìn)行緩存,并建 立所述子類(lèi)字節(jié)碼文件與事件源字節(jié)碼文件的對(duì)應(yīng)關(guān)系;所述加載單元用于當(dāng)啟動(dòng)或激活程序時(shí),根據(jù)所述緩存單元建立的對(duì)應(yīng)關(guān)系,應(yīng) 用自定義類(lèi)加載器對(duì)所述字節(jié)碼織入單元織入的子類(lèi)字節(jié)碼文件進(jìn)行加載,實(shí)現(xiàn)需要織入 的程序功能。上述的織入裝置,優(yōu)選的,所述事件監(jiān)聽(tīng)單元獲取的字節(jié)碼織入指令中包含織入 字節(jié)碼實(shí)現(xiàn)程序功能的功能信息。上述的織入裝置,優(yōu)選的,所述加載單元包括類(lèi)型判斷單元和加載方式選擇單 元;所述類(lèi)型判斷單元用于對(duì)需要加載的子類(lèi)字節(jié)碼文件的歸屬類(lèi)型進(jìn)行判斷;所述加載方式選擇單元用于根據(jù)所述類(lèi)型判斷單元判斷的歸屬類(lèi)型選擇與所述 歸屬類(lèi)型相對(duì)應(yīng)的類(lèi)加載方式?!N字節(jié)碼織入系統(tǒng),包括客戶端、應(yīng)用端及一種字節(jié)碼織入裝置。由以上本申請(qǐng)實(shí)施例提供的技術(shù)方案可見(jiàn),本發(fā)明提供的字節(jié)碼織入方法、裝置 及系統(tǒng),在程序部署事件需要織入字節(jié)碼實(shí)現(xiàn)增加的功能的時(shí),對(duì)事件源的字節(jié)碼文件織 入一個(gè)子類(lèi)字節(jié)碼文件,該子類(lèi)字節(jié)碼文件可以實(shí)現(xiàn)程序要增加的功能,對(duì)子類(lèi)字節(jié)碼文 件進(jìn)行緩存,并建立子類(lèi)字節(jié)碼文件與源字節(jié)碼文件之間的對(duì)應(yīng)關(guān)系,當(dāng)運(yùn)行程序時(shí),根據(jù) 該對(duì)應(yīng)關(guān)系,調(diào)用自定義類(lèi)加載器,對(duì)子類(lèi)字節(jié)碼文件進(jìn)行加載,以實(shí)現(xiàn)需要織入的程序功 能,該方法中,織入的字節(jié)碼類(lèi)型與源文件類(lèi)型一致,使得織入的類(lèi)屬性和方法既與源文件 類(lèi)型一致,又增加了新的功能代碼,與源文件的結(jié)構(gòu)和行數(shù)一致,從而不影響程序代碼的調(diào) 試ο
為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本 申請(qǐng)中記載的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下, 還可以根據(jù)這些附圖獲得其他的附圖。圖1為本申請(qǐng)實(shí)施例提供的實(shí)現(xiàn)字節(jié)碼織入方法的流程圖;圖2為本申請(qǐng)實(shí)施例提供的字節(jié)碼織入方法的詳細(xì)流程圖;圖3為本申請(qǐng)實(shí)施例提供的對(duì)字節(jié)碼進(jìn)行加載的流程圖4為本申請(qǐng)實(shí)施例提供的對(duì)字節(jié)碼進(jìn)行加載的詳細(xì)流程圖;圖5為本申請(qǐng)實(shí)施例提供的字節(jié)碼織入裝置的結(jié)構(gòu)示意圖;圖6為本申請(qǐng)實(shí)施例提供的字節(jié)碼織入裝置的一詳細(xì)結(jié)構(gòu)示意圖;圖7為本申請(qǐng)實(shí)施例提供的字節(jié)碼織入系統(tǒng)的結(jié)構(gòu)圖示意圖。
具體實(shí)施例方式本申請(qǐng)實(shí)施例提供一種字節(jié)碼織入方法、裝置及系統(tǒng),為源文件字節(jié)碼文件織入 一個(gè)子類(lèi)字節(jié)碼文件,建立子類(lèi)字節(jié)碼文件與源文件字節(jié)碼文件的對(duì)應(yīng)關(guān)系,通過(guò)對(duì)子類(lèi) 字節(jié)碼文件的運(yùn)行實(shí)現(xiàn)需要織入的功能。以上是本申請(qǐng)的核心思想,為了使本技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)方案。下 面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯 然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請(qǐng)中的實(shí) 施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng) 當(dāng)屬于本申請(qǐng)保護(hù)的范圍。本申請(qǐng)實(shí)施例提供的字節(jié)碼織入方法的流程圖如圖1所示,包括步驟SlOl 監(jiān)聽(tīng)程序部署事件,獲取事件源的字節(jié)碼織入指令及事件源的字節(jié)碼 文件;步驟S102 依據(jù)字節(jié)碼織入指令織入事件源的子類(lèi)字節(jié)碼文件;步驟S103 對(duì)子類(lèi)字節(jié)碼文件進(jìn)行緩存,并建立子類(lèi)字節(jié)碼文件與事件源字節(jié)碼 文件的對(duì)應(yīng)關(guān)系;步驟S104 當(dāng)啟動(dòng)或激活程序時(shí),根據(jù)上述對(duì)應(yīng)關(guān)系應(yīng)用自定義類(lèi)加載器對(duì)織入 的子類(lèi)字節(jié)碼文件進(jìn)行加載,實(shí)現(xiàn)需要織入的程序功能。需要說(shuō)明的是,本實(shí)施例公開(kāi)的方法,在程序部署之后進(jìn)行織入字節(jié)碼的操作,不 需要在開(kāi)發(fā)和編譯期進(jìn)行字節(jié)碼織入,織入靈活方便,不需要開(kāi)發(fā)人員使用定制的開(kāi)發(fā)工 具開(kāi)發(fā)程序。當(dāng)需要對(duì)程序進(jìn)行功能增加時(shí),將需要增加的功能信息以信息指令的形式發(fā)送至 執(zhí)行系統(tǒng)中,系統(tǒng)為源字節(jié)碼文件建立一個(gè)子類(lèi),將需要織入的實(shí)現(xiàn)程序功能的字節(jié)碼文 件織入到子類(lèi)中,建立子類(lèi)與源字節(jié)碼文件的關(guān)聯(lián)信息,對(duì)子類(lèi)字節(jié)碼文件進(jìn)行緩存,當(dāng)需 要對(duì)程序運(yùn)行時(shí),運(yùn)行至關(guān)聯(lián)區(qū)域時(shí),調(diào)用自定義的類(lèi)加載容器對(duì)織入的子類(lèi)字節(jié)碼文件 進(jìn)行加載并運(yùn)行,實(shí)現(xiàn)需要織入的字節(jié)碼功能。本申請(qǐng)實(shí)施例提供的字節(jié)碼織入方法的詳細(xì)流程圖如圖2所示,包括步驟S201 監(jiān)聽(tīng)程序部署事件;在程序運(yùn)行時(shí)依賴容器監(jiān)聽(tīng)程序的部署事件,實(shí)時(shí)監(jiān)控部署的程序,并對(duì)其進(jìn)行 檢查,看是否需要進(jìn)行運(yùn)行時(shí)織入,執(zhí)行步驟S202 ;步驟S202 檢查事件源是否需要織入字節(jié)碼;是,執(zhí)行步驟S203 ;否則,執(zhí)行步驟 S206 ;步驟S203 獲取事件源的字節(jié)碼流;步驟S204 織入原類(lèi)型生成子類(lèi)字節(jié)碼;織入的字節(jié)碼文件,類(lèi)型為原類(lèi)型的子類(lèi),這樣織入的類(lèi)屬性和方法既與原類(lèi)型一致,而且原類(lèi)型的結(jié)構(gòu)和行數(shù)與源代碼一致;步驟S205 對(duì)子類(lèi)字節(jié)碼進(jìn)行緩存;步驟S206 啟動(dòng)/激活程序。需要說(shuō)明的是本發(fā)明使用ASM進(jìn)行代碼織入,讀物需要織入的字節(jié)碼流使用ASM 織入代碼實(shí)現(xiàn)特定的功能,采用ASM進(jìn)行字節(jié)碼織入,織入運(yùn)行效率高,提高了開(kāi)發(fā)人員的 開(kāi)發(fā)效率,運(yùn)行期織入解除定制開(kāi)發(fā)工具的依賴;生成子類(lèi),方便調(diào)試;在程序部署之后,加載之前進(jìn)行字節(jié)碼織入首先打開(kāi)事件源的程序字節(jié)碼文件, 對(duì)其進(jìn)行織入,織入過(guò)程中不修改源字節(jié)碼文件,而是將織入的字節(jié)碼文件放入指定的緩 存位置,并記錄被織入的字節(jié)碼文件與源字節(jié)碼文件的對(duì)應(yīng)關(guān)系,直至織入過(guò)程完成。本申請(qǐng)實(shí)施例提供的對(duì)字節(jié)碼進(jìn)行加載的流程圖如圖3所示,包括步驟S301 判斷需要加載的子類(lèi)字節(jié)碼文件所在類(lèi)的歸屬類(lèi)型;步驟S302 根據(jù)上述歸屬類(lèi)型選擇與其相對(duì)應(yīng)的類(lèi)加載方式;步驟S303 應(yīng)用自定義類(lèi)加載器根據(jù)所述類(lèi)加載方式對(duì)所述類(lèi)中的子類(lèi)字節(jié)碼 文件進(jìn)行加載。需要說(shuō)明的是在程序被激活或者啟動(dòng)之后,使用系統(tǒng)類(lèi)加載容器無(wú)法加載到織 入后的類(lèi),所以要實(shí)現(xiàn)一個(gè)自定義的類(lèi)加載器,當(dāng)程序依賴的容器需要加載指定的類(lèi)時(shí),使 用自定義的類(lèi)加載器去加載織入后的類(lèi)來(lái)代替程序原有的類(lèi),以達(dá)到動(dòng)態(tài)加載特殊功能類(lèi) 的目的。本申請(qǐng)實(shí)施例提供的對(duì)字節(jié)碼進(jìn)行加載的詳細(xì)流程圖如圖4所示,包括,步驟S401 判斷是否是織入過(guò)的字節(jié)碼所在類(lèi)的類(lèi)型,是,執(zhí)行步驟S402 ;否則, 執(zhí)行步驟S403 ;步驟S402 從緩存的字節(jié)碼中加載需要的字節(jié)碼,加載完畢后執(zhí)行步驟S408 ;步驟S403 判斷是否是容器中的類(lèi)型,是,執(zhí)行步驟S404 ;否則,執(zhí)行步驟S405 ;步驟S404 采用雙親委托機(jī)制加載類(lèi),加載完畢后執(zhí)行步驟S408 ;S405 判斷是否是程序中的類(lèi)型;是,執(zhí)行步驟S406 ;否則執(zhí)行步驟S407 ;S406 使用程序中的類(lèi)加載器加載類(lèi);執(zhí)行完畢后執(zhí)行步驟S408 ;步驟S407 ;使用第三方類(lèi)庫(kù)加載類(lèi);S408 加載過(guò)程結(jié)束。需要說(shuō)明的是容器要正確加載和運(yùn)行程序中的內(nèi)容,同時(shí)需要加載其他許多類(lèi) 型的類(lèi),這些類(lèi)可能是容器中的類(lèi)型、程序中的類(lèi)型、織入后的類(lèi)型和其他提供的類(lèi)型,如 果要加載的類(lèi)時(shí)織入過(guò)的類(lèi)型,則從織入緩存區(qū)域查詢織入后的字節(jié)碼文件記載類(lèi)型;并 且使用其中一方的類(lèi)加載器作為父類(lèi)加載器,依賴其他方的類(lèi)加載器來(lái)加載需要加載的類(lèi) 型。本發(fā)明提供的方法,因?yàn)槭窃谶\(yùn)行時(shí)織入和加載,所以運(yùn)行時(shí)可以從多方類(lèi)加載器中加 載類(lèi)型。本申請(qǐng)實(shí)施例提供的方法,源字節(jié)碼文件的類(lèi)型和行數(shù)均不改變,所以,如果原類(lèi) 型中如果存在Annotation的話,執(zhí)行過(guò)程中,將會(huì)完全復(fù)制Annotation到其織入后的子類(lèi) 中,且位置不變,這樣,運(yùn)行程序時(shí),不會(huì)因?yàn)锳nnotation丟失出錯(cuò);本發(fā)明提供的方法,其織入過(guò)程時(shí)在程序運(yùn)行期織入,織入過(guò)程是在程序部署之 后、加載之前,將織入的代碼存入緩存文件,不需要修改源字節(jié)碼文件的內(nèi)容,因?yàn)樵闯绦蛑械暮灻麅?nèi)容不發(fā)生改變,支持了簽名的jar包機(jī)制。本申請(qǐng)實(shí)施例提供的字節(jié)碼織入方法、裝置及系統(tǒng),直接為源字節(jié)碼文件織入子 類(lèi)字節(jié)碼,建立子類(lèi)字節(jié)碼與源字節(jié)碼之間的對(duì)應(yīng)關(guān)系,不需要對(duì)源字節(jié)碼文件進(jìn)行修改, 程序運(yùn)行時(shí),源代碼的行數(shù)不變,保證了程序的正確運(yùn)行。本申請(qǐng)實(shí)施例提供的字節(jié)碼織入裝置的結(jié)構(gòu)圖如圖5所示,包括事件監(jiān)聽(tīng)獲取 單元501、字節(jié)碼織入單元502、緩存單元503和加載單元504 ;其中事件監(jiān)聽(tīng)獲取單元501用于監(jiān)聽(tīng)程序部署事件,獲取事件源的字節(jié)碼織入 指令及事件源的字節(jié)碼文件;字節(jié)碼織入單元502用于依據(jù)事件監(jiān)聽(tīng)獲取單元501獲取的事件源的字節(jié)碼織入 指令織入事件源的子類(lèi)字節(jié)碼文件;緩存單元503用于對(duì)字節(jié)碼織入單元502織入的子類(lèi)字節(jié)碼文件進(jìn)行緩存,并建 立類(lèi)字節(jié)碼文件與事件源字節(jié)碼文件的對(duì)應(yīng)關(guān)系;加載單元504用于當(dāng)啟動(dòng)或激活程序時(shí),根據(jù)緩存單元503建立的對(duì)應(yīng)關(guān)系,應(yīng)用 自定義類(lèi)加載器對(duì)字節(jié)碼織入單元502織入的子類(lèi)字節(jié)碼文件進(jìn)行加載,實(shí)現(xiàn)需要織入的 程序功能。事件監(jiān)聽(tīng)單元501獲取的字節(jié)碼織入指令中包含織入字節(jié)碼實(shí)現(xiàn)程序功能的功 能信息。本申請(qǐng)實(shí)施例提供的字節(jié)碼織入裝置的一詳細(xì)結(jié)構(gòu)示意圖如圖6所示,加載單元 504包括類(lèi)型判斷單元601和加載方式選擇單元602 ;類(lèi)型判斷單元601用于對(duì)需要加載的子類(lèi)字節(jié)碼文件的歸屬類(lèi)型進(jìn)行判斷;加載方式選擇單元602用于根據(jù)類(lèi)型判斷單元601判斷的歸屬類(lèi)型選擇與所述歸 屬類(lèi)型相對(duì)應(yīng)的類(lèi)加載方式。本申請(qǐng)實(shí)施例提供的字節(jié)碼織入系統(tǒng)的結(jié)構(gòu)示意圖如圖7所示,包括客戶端 701、應(yīng)用端703及一種字節(jié)碼織入裝置702 ;其中客戶端701用于為用戶提供可操作的系統(tǒng)平臺(tái);字節(jié)碼織入裝置702用于控制字節(jié)碼織入過(guò)程;應(yīng)用端703用于對(duì)字節(jié)碼織入過(guò)程進(jìn)行具體化實(shí)施。本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部 分互相參見(jiàn)即可,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處。以上所述僅是本 申請(qǐng)的具體實(shí)施方式
,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本申請(qǐng)?jiān)?理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本申請(qǐng)的保護(hù)范圍。
權(quán)利要求
一種字節(jié)碼織入方法,其特征在于,包括監(jiān)聽(tīng)程序部署事件,獲取事件源的字節(jié)碼織入指令及事件源的字節(jié)碼文件;依據(jù)所述字節(jié)碼織入指令織入事件源的子類(lèi)字節(jié)碼文件;對(duì)所述子類(lèi)字節(jié)碼文件進(jìn)行緩存,并建立所述子類(lèi)字節(jié)碼文件與事件源字節(jié)碼文件的對(duì)應(yīng)關(guān)系;當(dāng)啟動(dòng)或激活程序時(shí),根據(jù)所述對(duì)應(yīng)關(guān)系應(yīng)用自定義類(lèi)加載器對(duì)織入的子類(lèi)字節(jié)碼文件進(jìn)行加載,實(shí)現(xiàn)需要織入的程序功能。
2.根據(jù)權(quán)利要求1所述的織入方法,其特征在于,所述字節(jié)碼織入指令中包含織入字 節(jié)碼實(shí)現(xiàn)程序功能的功能信息。
3.根據(jù)權(quán)利要求1所述的織入方法,其特征在于,所述應(yīng)用自定義類(lèi)加載器對(duì)織入的 子類(lèi)字節(jié)碼文件進(jìn)行加載的過(guò)程具體為判斷需要加載的子類(lèi)字節(jié)碼文件所在類(lèi)的歸屬類(lèi)型;根據(jù)所述歸屬類(lèi)型選擇與其相對(duì)應(yīng)的類(lèi)加載方式;應(yīng)用自定義類(lèi)加載器根據(jù)所述類(lèi)加載方式對(duì)所述類(lèi)中的子類(lèi)字節(jié)碼文件進(jìn)行加載。
4.一種字節(jié)碼織入裝置,其特征在于,包括事件監(jiān)聽(tīng)獲取單元、字節(jié)碼織入單元、緩 存單元和加載單元;其中所述事件監(jiān)聽(tīng)獲取單元用于監(jiān)聽(tīng)程序部署事件,獲取事件源的字節(jié)碼織入指令 及事件源的字節(jié)碼文件;所述字節(jié)碼織入單元用于依據(jù)所述事件監(jiān)聽(tīng)獲取單元獲取的事件源的字節(jié)碼織入指 令織入事件源的子類(lèi)字節(jié)碼文件;所述緩存單元用于對(duì)所述字節(jié)碼織入單元織入的子類(lèi)字節(jié)碼文件進(jìn)行緩存,并建立所 述子類(lèi)字節(jié)碼文件與事件源字節(jié)碼文件的對(duì)應(yīng)關(guān)系;所述加載單元用于當(dāng)啟動(dòng)或激活程序時(shí),根據(jù)所述緩存單元建立的對(duì)應(yīng)關(guān)系,應(yīng)用自 定義類(lèi)加載器對(duì)所述字節(jié)碼織入單元織入的子類(lèi)字節(jié)碼文件進(jìn)行加載,實(shí)現(xiàn)需要織入的程 序功能。
5.根據(jù)權(quán)利要求4所述的織入裝置,其特征在于,所述事件監(jiān)聽(tīng)單元獲取的字節(jié)碼織 入指令中包含織入字節(jié)碼實(shí)現(xiàn)程序功能的功能信息。
6.根據(jù)權(quán)利要求4所述的織入裝置,其特征在于,所述加載單元包括類(lèi)型判斷單元和 加載方式選擇單元;所述類(lèi)型判斷單元用于對(duì)需要加載的子類(lèi)字節(jié)碼文件所在類(lèi)的歸屬類(lèi)型進(jìn)行判斷;所述加載方式選擇單元用于根據(jù)所述類(lèi)型判斷單元判斷的歸屬類(lèi)型選擇與所述歸屬 類(lèi)型相對(duì)應(yīng)的類(lèi)加載方式。
7.一種字節(jié)碼織入系統(tǒng),其特征在于,包括客戶端、應(yīng)用端及權(quán)利要求4 6任一項(xiàng)所 述的一種字節(jié)碼織入裝置。
全文摘要
本申請(qǐng)公開(kāi)了一種字節(jié)碼織入方法、裝置及系統(tǒng),包括監(jiān)聽(tīng)程序部署事件,獲取事件源的字節(jié)碼織入指令及事件源的字節(jié)碼文件;依據(jù)所述字節(jié)碼織入指令織入事件源的子類(lèi)字節(jié)碼文件;對(duì)所述子類(lèi)字節(jié)碼文件進(jìn)行緩存,并建立所述子類(lèi)字節(jié)碼文件與事件源字節(jié)碼文件的對(duì)應(yīng)關(guān)系;當(dāng)啟動(dòng)或激活程序時(shí),根據(jù)所述對(duì)應(yīng)關(guān)系應(yīng)用自定義類(lèi)加載器對(duì)織入的子類(lèi)字節(jié)碼文件進(jìn)行加載,實(shí)現(xiàn)需要織入的程序功能。本申請(qǐng)實(shí)施例提供一種字節(jié)碼織入方法裝置及系統(tǒng),在不改變?cè)创a行數(shù)的前提下,為源文件字節(jié)碼織入子類(lèi)字節(jié)碼文件,程序運(yùn)行時(shí),調(diào)用自定義類(lèi)加載容器,加載織入的子類(lèi)字節(jié)碼文件,通過(guò)對(duì)子類(lèi)字節(jié)碼文件的運(yùn)行,實(shí)現(xiàn)需要織入的程序功能。
文檔編號(hào)G06F9/445GK101957766SQ20101028415
公開(kāi)日2011年1月26日 申請(qǐng)日期2010年9月17日 優(yōu)先權(quán)日2010年9月17日
發(fā)明者劉民, 景新海, 羅佳 申請(qǐng)人:山東中創(chuàng)軟件工程股份有限公司;山東中創(chuàng)軟件商用中間件股份有限公司