亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

加載java三方庫的不同版本的方法和裝置的制作方法

文檔序號:6431189閱讀:177來源:國知局
專利名稱:加載java三方庫的不同版本的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及JAVA應(yīng)用程序中三方庫的多版本兼容技術(shù),特別涉及一種加載JAVA三方庫的不同版本的方法和裝置。
背景技術(shù)
隨著信息技術(shù)的發(fā)展,計算機應(yīng)用越來越廣泛,各種應(yīng)用系統(tǒng)相繼而生,采用面向?qū)ο蠹夹g(shù)開發(fā)應(yīng)用系統(tǒng)也越來越多,JAVA開發(fā)技術(shù)得到了廣泛的使用,特別是采用JAVA開發(fā)一個長期性的、大型的應(yīng)用程序也就越來越多。由于JAVA在程序開發(fā)中占有的比例越來越大,項目工程也越來越大,這就使得 JAVA開發(fā)人員不能只基于官方提供的JAVA開發(fā)工具包(JDKJAVADevelopment Kit)來完成一個應(yīng)用程序的開發(fā),而必須利用各種資源進行整合來進行快速開發(fā),在這個過程中使用已經(jīng)很成熟的三方庫也就越來越迫切。所謂三方庫,就是由第三方提供的庫文件,其中包含了可以直接使用的變量、函數(shù)或類?,F(xiàn)今,免費的、付費的三方庫越來越多,在任何一個采用JAVA開發(fā)的應(yīng)用程序產(chǎn)品中,都會或多或少地使用三方庫。并且照目前的趨勢來看,未來使用三方庫的開發(fā)過程還會繼續(xù)增長,對三方庫的要求也會隨之不斷提高。因此,三方庫的內(nèi)容也在不斷地擴充,這就使得三方庫的版本越來越多,版本也在不斷地升級。在三方庫不斷升級的過程中,功能的兼容性會存在一定的問題。一般而言,JAVA應(yīng)用程序中盡量引用一個版本的三方庫。但是在開發(fā)過程中,對三方庫的升級要求也越來越明顯,隨著JAVA應(yīng)用程序的不斷開發(fā),需要使用新版本的三方庫;但是JAVA應(yīng)用程序的一些早期模塊又需要老版本的三方庫,這樣一個JAVA應(yīng)用程序可能需要同一個三方庫的不同版本,這就可能使用三方庫的版本中起了沖突。在現(xiàn)有技術(shù)中,JAVA應(yīng)用程序進行三方庫升級只能進行源代碼修改,使得同一個三方庫的不同版本分別形成一個獨立的三方庫,也就是說,將同一個三方庫的不同版本分別變成不同的三方庫,從而完成三方庫的升級。但是這樣帶來了很大的工作量和維護工作。

發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種JAVA三方庫管理方法和裝置,能夠根據(jù)模塊需要自動引用所需版本的三方庫,避免三方庫的版本沖突。本發(fā)明實施例提供一種加載JAVA三方庫的不同版本的方法,包括如下步驟A、構(gòu)建一個用于構(gòu)建類加載管理器和各個模塊的模塊類加載器的啟動管理單元, 實現(xiàn)JAVA應(yīng)用程序啟動前的初始化;B、在所述啟動管理單元中啟動JAVA應(yīng)用程序,通過類加載管理器加載JAVA應(yīng)用程序的類,根據(jù)模塊的類的特征找到對應(yīng)的模塊類加載器實現(xiàn)模塊的類的加載,其中至少兩個模塊中存在不同版本的相同三方庫。較佳地,步驟A包括
Al、構(gòu)建用于根據(jù)待加載類的特征來使用相應(yīng)的類加載器的類加載管理器;A2、構(gòu)建各個模塊的模塊類加載器,其中至少兩個模塊中存在不同版本的相同三方庫;A3、構(gòu)建各個模塊的類的特征和模塊類加載器的映射關(guān)系,并添加到類加載管理器中。較佳地,步驟A還包括A4、構(gòu)建用于加載無三方庫要求的模塊中的類和JAVA應(yīng)用程序啟動類的平臺類加載器。較佳地,步驟B包括Bi、通過類加載管理器加載JAVA應(yīng)用程序啟動類;B2、通過啟動JAVA應(yīng)用程序啟動類啟動JAVA應(yīng)用程序;B3、JAVA應(yīng)用程序加載模塊的類時,檢測加載類特征,根據(jù)預(yù)先定義的模塊的類的特征與模塊類加載器的映射關(guān)系,在加載類時采用對應(yīng)的模塊類加載器;B4、如果未找到合適的模塊類加載器,再使用平臺類加載器加載無三方庫要求的模塊。較佳地,在通過線程類加載器加載對象之前,在JAVA應(yīng)用程序執(zhí)行過程中動態(tài)修改線程類加載器。本發(fā)明實施例還提供一種加載同一個JAVA三方庫的不同版本的裝置,包括啟動管理單元,用于構(gòu)建類加載管理器和模塊類加載器;并用于實現(xiàn)JAVA應(yīng)用程序啟動的初始并啟動JAVA應(yīng)用程序,通過反射的方式執(zhí)行JAVA應(yīng)用程序啟動類;類加載管理器,用于接收JAVA應(yīng)用程序?qū)︻惖募虞d請求,并管理JAVA應(yīng)用程序的各個模塊的類加載器;根據(jù)待加載類的特征來使用相應(yīng)的類加載器,其中包括使用模塊類加載器;至少兩個模塊類加載器,所述模塊類加載器用于實現(xiàn)模塊的類的加載,至少兩個模塊中存在不同版本的相同三方庫。較佳地,該裝置進一步包括平臺類加載器,用于加載JAVA應(yīng)用程序的平臺部分。較佳地,該裝置進一步包括線程類加載器管理單元,用于在JAVA應(yīng)用程序執(zhí)行過程中動態(tài)修改線程類加載
ο較佳地,所述平臺部分是指無三方庫要求的模塊的類和JAVA應(yīng)用程序啟動類。較佳地,所述平臺類加載器由類加載管理器構(gòu)建。從以上技術(shù)方案可以看出,通過構(gòu)建啟動管理單元來啟動JAVA應(yīng)用程序,通過啟動管理單元構(gòu)建模塊加載器實現(xiàn)模塊的類的加載,從而使得JAVA應(yīng)用程序能夠根據(jù)模塊需要自動引用所需版本的三方庫,避免三方庫的版本沖突。


圖1是本發(fā)明實施例的JAVA三方庫管理裝置結(jié)構(gòu)示意圖;圖2是本發(fā)明實施例的啟動管理單元的處理流程圖3是本發(fā)明實施例的類加載管理器的處理流程圖;圖4是本發(fā)明實施例的平臺類加載器的處理流程圖;圖5是本發(fā)明實施例的模塊加載器的處理流程圖;圖6是本發(fā)明實施例的線程類加載器管理在JAVA應(yīng)用程序被使用的流程圖;圖7是本發(fā)明實施例的線程類加載器管理的處理流程圖。
具體實施例方式下面結(jié)合附圖及實施方式,詳細描述本發(fā)明的技術(shù)方案?,F(xiàn)有技術(shù)采用啟動命令java-cp*. jar com. app. JavaAppMain來實現(xiàn)java應(yīng)用應(yīng)用程序的啟動,JAVA應(yīng)用程序中只有一個類加載器,由JDK指定,并且在JAVA歸檔文件中一個三方庫只能存在單一版本。而本發(fā)明方案中,為了使得JAVA應(yīng)用程序能夠根據(jù)模塊需要自動引用所需版本的三方庫,避免三方庫的版本沖突,不再通過上述啟動命令啟動JAVA應(yīng)用程序,而是構(gòu)建一個啟動管理單元來啟動。本發(fā)明實施例提供一種加載同一個JAVA三方庫的不同版本的裝置的結(jié)構(gòu)框圖如圖1所示,本裝置包含五個部分啟動管理單元、類加載管理器、平臺類加載器、模塊類加載器、線程類加載器管理單元,各部分的主要功能如下啟動管理單元101,負責初始化過程,完成類加載管理器的構(gòu)建、平臺類加載器的構(gòu)建、模塊類加載器的構(gòu)建、模塊的類的特征和模塊類加載器的映射關(guān)系,按照模塊的類的特征添加模塊類加載器到類加載管理器中,調(diào)用類加載管理器加載JAVA應(yīng)用程序啟動類、 再在本管理單元中啟動JAVA應(yīng)用程序(這里需要通過反射的方式啟動)。類加載管理器102,用于類的特征的識別,根據(jù)類的特征找到對應(yīng)的模塊類加載器 (如果沒有找到,就轉(zhuǎn)到平臺類加載器上),是通過對應(yīng)的類加載器完成類的加載。模塊類加載器103,負責模塊的類的加載過程,加載失敗轉(zhuǎn)到類加載管理器中繼續(xù)。本發(fā)明中至少兩個模塊中存在不同版本的相同三方庫。平臺類加載器104,用于接收JAVA應(yīng)用程序?qū)︻惖募虞d請求,實現(xiàn)JAVA應(yīng)用程序平臺部分的類加載(包含無三方庫版本要求的模塊和JAVA應(yīng)用程序啟動類部分),還用于檢測當前待加載的類是否為模塊的類,根據(jù)檢測結(jié)果轉(zhuǎn)入到類加載管理器中。需要說明的是,在JAVA應(yīng)用程序或者JAVA三方庫的實現(xiàn)過程中,除了通用的類加載方式(在JAVA應(yīng)用程序或者JAVA三方庫中直接加載類),還有通過線程類加載器加載對象(例如spring就是采用此種模式加載類),通過線程類加載器加載類,需要對該方式進行特殊的處理。所以本發(fā)明實施例提供的加載同一個JAVA三方庫的不同版本的裝置還包括線程類加載器管理單元,用于JAVA應(yīng)用程序中的線程類加載器的修改和恢復(fù)功能。本發(fā)明實施例提供的加載同一個JAVA三方庫的不同版本方法流程圖如圖2所示, 具體如下步驟S210 構(gòu)建類加載管理器,用于接收JAVA應(yīng)用程序?qū)︻惖募虞d請求,并管理 JAVA應(yīng)用程序的各個模塊的類加載器。其中包含公共JAVA歸檔文件(JAR,JAVAArchive);
步驟S220 構(gòu)建平臺類加載器,包含無三方庫版本要求的模塊和JAVA應(yīng)用程序啟動類部分; 步驟S230 構(gòu)建各個模塊的類加載器;注意這里的JAVA歸檔文件是按照模塊來劃分的,則可以在兩個不同的模塊中存在不同版本的相同三方庫;步驟S240 構(gòu)建模塊的類的特征和模塊類加載器的映射關(guān)系,能夠通過模塊的類的特征找到對應(yīng)的模塊類加載器,并按照模塊的類的特征添加模塊類加載器到類加載管理器中;步驟S250 通過類加載管理器加載JAVA應(yīng)用程序啟動類,并實例化為對象;步驟S260 通過反射的方式啟動JAVA應(yīng)用程序。類加載管理器一般是由JAVA應(yīng)用程序啟動管理單元或平臺類加載器或模塊類加載器調(diào)用進入的,類加載管理器的處理流程見圖3,其過程如下步驟S310,檢測待加載類的特征,如果是模塊的類,找到對應(yīng)的模塊類加載器,進入步驟S320 ;如果不是模塊的類,進入S330 ;步驟S320,通過對應(yīng)的模塊類加載器加載待加載類,返回結(jié)果,結(jié)束本流程;步驟S330,通過平臺類加載器加載待加載類,加載成功則返回結(jié)果,結(jié)束本流程; 否則進入S340 ;步驟S340,直接調(diào)用JAVA的默認類加載器加載。平臺類加載器是由類加載管理器調(diào)用進入或JDK直接調(diào)用進入的。平臺類加載器加載的處理流程見圖5,過程如下步驟S410,在需要加載一個類時,需要先檢測是否為模塊的類,如果是進入S420, 如果否進入S430 ;步驟S420,直接調(diào)用類加載管理器來重新指定模塊類加載器加載;步驟S430,通過平臺類加載器的JAVA歸檔文件加載待加載類。模塊類加載器也是由類加載管理器調(diào)用進入或JDK直接調(diào)用進入的。模塊類加載器加載的處理流程見圖5,過程如下步驟S510,直接調(diào)用對應(yīng)模塊類加載器中的JAVA歸檔文件加載待加載類,如果失敗轉(zhuǎn)入到S520,如果成功轉(zhuǎn)入到S530 ;步驟S520,調(diào)用類加載管理器來重新指定其他類加載器(可能是其他模塊的模塊類加載器,可能是平臺類加載器);步驟S530,成功后返回。在JAVA應(yīng)用程序中還需要對線程的類加載器進行管理,在本發(fā)明中是通過線程類加載器管理單元來完成的,圖6和圖7描述了 JAVA應(yīng)用程序的處理過程和線程類加載器
管理單元的管理過程。圖6為線程類加載器管理單元在JAVA應(yīng)用程序的調(diào)用流程步驟S610,在JAVA應(yīng)用程序中需要加載類時,進入到平臺類加載器或者模塊類加載器中。在現(xiàn)有技術(shù)中JAVA應(yīng)用程序中是通過JDK進行類的加載的,而本發(fā)明JAVA應(yīng)用程序的對象的默認類加載器由類加載管理器指定,故這里加載流程將會直接進入到平臺類加載器或者模塊類加載器中。步驟S620,在類加載完成后,在JAVA應(yīng)用程序中實例化對象;步驟S630,在JAVA應(yīng)用程序中對步驟S630實例化的對象通過線程類加載器管理單元重新構(gòu)建,得到被管理的JAVA應(yīng)用程序?qū)ο?可以采用動態(tài)代理的構(gòu)建線程類加載器管理單元)。在JAVA應(yīng)用程序中調(diào)用被管理的JAVA應(yīng)用程序?qū)ο筮M行其他類的邏輯處理, 這里是執(zhí)行的被管理的JAVA應(yīng)用程序?qū)ο蟮姆椒?,而不是步驟S630的實例化對象。圖7為線程類加載器管理單元的執(zhí)行過程步驟S710,首先需要比較當前類(即步驟S610中需要加載的類)的類加載器和線程類加載器是否一致,如果一致進入S760,如果不一致進入S720 ;步驟S720,將當前線程類加載器緩存起來;步驟S730,修改當前線程的類加載器為當前類的類加載器,這里當前類的類加載器是由類加載管理器指定,可能是平臺類加載器可能是模塊類加載器;步驟S740,執(zhí)行步驟S620中創(chuàng)建的對象,完成JAVA應(yīng)用程序的邏輯;步驟S750,恢復(fù)線程的類加載器為S720緩存的類加載器,進入步驟S770 ;步驟S760,執(zhí)行步驟S620中創(chuàng)建的對象,完成JAVA應(yīng)用程序的邏輯;步驟S770,返回結(jié)果,本流程結(jié)束。注線程類加載器管理單元可以通過動態(tài)代理技術(shù)實現(xiàn)。在JDK1. 3以后,JAVA提供了動態(tài)代理技術(shù),就是攔截JAVA應(yīng)用程序的方法執(zhí)行, 使得在執(zhí)行JAVA應(yīng)用程序的方法時,不再直接調(diào)用JAVA應(yīng)用程序的方法,而是調(diào)用動態(tài)代理提供的方法,再通過動態(tài)代理的方法來調(diào)用JAVA應(yīng)用程序的方法。簡單的來說如果JAVA應(yīng)用程序?qū)ο驛需要調(diào)用對象B的方法,如不采用動態(tài)代理,在對象A中就直接調(diào)用對象B的方法;如果采用了動態(tài)代理,在對象B之上需要構(gòu)建一個動態(tài)代理的對象C,對象A就調(diào)用了對象C的方法,在對象C在來調(diào)用對象B的方法返回給A,這樣就能夠在執(zhí)行對象B的方法時增加動態(tài)代理中的其他邏輯處理。
權(quán)利要求
1.一種加載JAVA三方庫的不同版本的方法,其特征在于,包括如下步驟A、構(gòu)建一個用于構(gòu)建類加載管理器和各個模塊的模塊類加載器的啟動管理單元,實現(xiàn) JAVA應(yīng)用程序啟動前的初始化;B、在所述啟動管理單元中啟動JAVA應(yīng)用程序,通過類加載管理器加載JAVA應(yīng)用程序的類,根據(jù)模塊的類的特征找到對應(yīng)的模塊類加載器實現(xiàn)模塊的類的加載,其中至少兩個模塊中存在不同版本的相同三方庫。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A包括Al、構(gòu)建用于根據(jù)待加載類的特征來使用相應(yīng)的類加載器的類加載管理器;A2、構(gòu)建各個模塊的模塊類加載器,其中至少兩個模塊中存在不同版本的相同三方庫;A3、構(gòu)建各個模塊的類的特征和模塊類加載器的映射關(guān)系,并添加到類加載管理器中。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,步驟A還包括A4、構(gòu)建用于加載無三方庫要求的模塊中的類和JAVA應(yīng)用程序啟動類的平臺類加載ο
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,步驟B包括 Bi、通過類加載管理器加載JAVA應(yīng)用程序啟動類;B2、通過啟動JAVA應(yīng)用程序啟動類啟動JAVA應(yīng)用程序;B3、JAVA應(yīng)用程序加載模塊的類時,檢測加載類特征,根據(jù)預(yù)先定義的模塊的類的特征與模塊類加載器的映射關(guān)系,在加載類時采用對應(yīng)的模塊類加載器;B4、如果未找到合適的模塊類加載器,再使用平臺類加載器加載無三方庫要求的模塊。
5.根據(jù)權(quán)利要求1至4任一項所述的方法,其特征在于,在通過線程類加載器加載對象之前,在JAVA應(yīng)用程序執(zhí)行過程中動態(tài)修改線程類加載器。
6.一種加載同一個JAVA三方庫的不同版本的裝置,包括啟動管理單元,用于構(gòu)建類加載管理器和模塊類加載器;并用于實現(xiàn)JAVA應(yīng)用程序啟動的初始并啟動JAVA應(yīng)用程序,通過反射的方式執(zhí)行JAVA應(yīng)用程序啟動類;類加載管理器,用于接收JAVA應(yīng)用程序?qū)︻惖募虞d請求,并管理JAVA應(yīng)用程序的各個模塊的類加載器;根據(jù)待加載類的特征來使用相應(yīng)的類加載器,其中包括使用模塊類加載器;至少兩個模塊類加載器,所述模塊類加載器用于實現(xiàn)模塊的類的加載,至少兩個模塊中存在不同版本的相同三方庫。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,該裝置進一步包括 平臺類加載器,用于加載JAVA應(yīng)用程序的平臺部分。
8.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,該裝置進一步包括線程類加載器管理單元,用于在JAVA應(yīng)用程序執(zhí)行過程中動態(tài)修改線程類加載器。
9.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述平臺部分是指無三方庫要求的模塊的類和JAVA應(yīng)用程序啟動類。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述平臺類加載器由類加載管理器構(gòu)
全文摘要
本發(fā)明提供了一種加載JAVA三方庫的不同版本的方法,包括如下步驟A、構(gòu)建一個用于構(gòu)建類加載管理器和各個模塊的模塊類加載器的啟動管理單元,實現(xiàn)JAVA應(yīng)用程序啟動前的初始化;B、在所述啟動管理單元中啟動JAVA應(yīng)用程序,通過類加載管理器加載JAVA應(yīng)用程序的類,根據(jù)模塊的類的特征找到對應(yīng)的模塊類加載器實現(xiàn)模塊的類的加載,其中至少兩個模塊中存在不同版本的相同三方庫。本發(fā)明還提供一種加載JAVA三方庫的不同版本的裝置。本發(fā)明方案能夠根據(jù)模塊需要自動引用所需版本的三方庫,避免三方庫的版本沖突。
文檔編號G06F9/445GK102262555SQ20111024090
公開日2011年11月30日 申請日期2011年8月22日 優(yōu)先權(quán)日2011年8月22日
發(fā)明者楊斌, 鄧鵬 , 黃山 申請人:邁普通信技術(shù)股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1