两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種自定義類的加載方法及裝置的制造方法

文檔序號:9326728閱讀:529來源:國知局
一種自定義類的加載方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及計算機通信技術,尤其涉及一種自定義類的加載方法及裝置。
【背景技術】
[0002]java應用程序是一種可以撰寫跨平臺應用軟件的面向?qū)ο蟮某绦蛟O計語言。類是java應用程序的組織單位,任何的java語句,都要寫在類文件中。java繼承是從已有的類中派生出新的類,新的類能吸收已有類的數(shù)據(jù)屬性和行為,并能擴展新的能力。
[0003]類加載器(classloader)是java中的加載器,其本身也是一個java類,包括應用程序classloader以及組件classloader。當java應用程序需要加載某一類時,需要通過classloader將待加載類的二進制信息加載至內(nèi)存中。classloader擁有委托機制,除了根classloader,每一 classloader都會擁有自己的父級classloader。因而,當每一 classloader加載類時,會先將加載該類的任務委托給父級classloader,父級classloader再委托給上一父級,直至委托給根classloader。
[0004]假定oriClassLoader 的父級 classloader 是 classLoaderl ;
[0005]classLoaderl 的父級 clasloader 是 classLoader2 ;
[0006]classLoader2 的父級 classloader 是 classLoader3 ;
[0007]classLoader3 為根 classLoader,沒有父級 classLoader。
[0008]當oriclassloader根據(jù)委托機制加載具有繼承關系的A類時:
[0009]oriClassLoader直接將加載A類的任務依次通過classLoaderl以及classLoader2傳達至classLoader3,classLoader3接收加載A類的任務后,由于沒有父級classLoader,則在加載任務列表中查找是否包含A類,如果找到,加載A類并返回加載結果,如果未找到,將加載A類的任務再回傳至classLoader2,classLoader2,classLoaderl進行同樣的處理,直至oriClassLoader接收加載A類的任務后,查找A類,如果找到,加載A類并返回加載結果,如果未找到,拋出異常,表示加載A類失敗。
[0010]在加載A類完成之后,發(fā)現(xiàn)A類擁有父類或者實現(xiàn)java接口(繼承一個父類或者實現(xiàn)一個java接口),根據(jù)與加載A類相似的委托機制,oriClassLoader相應嘗試去加載A類的父類或者java接口,其中,父類與java接口也是類,如果加載A類的父類或者java接口成功,則對加載的父類或者java接口進行校驗,即校驗加載出的具有繼承關系的兩個自定義類是否屬于不同的文件類型,如果是,則拋出加載錯誤,如果是,加載組件中的A類成功。
[0011]一 java應用程序由多個組件組成,每個組件實現(xiàn)特定的功能,例如,有的組件可以作為Android操作系統(tǒng)進入java應用程序的入口點,各個組件協(xié)同合作,共同組成一個完整的java應用程序,這樣,通過將(java)程序分割成多個組件,各組件可以獨自更新,以達到升級android應用功能而無需升級android應用的目的,在后續(xù)需要加載某一組件時,與加載具有繼承關系的A類的流程相類似。這樣,在上述示例中,如果A類是一個僅屬于組件的類,同時繼承了一個父類,記為B類,假設B類在組件和應用程序中都存在,以應用程序classloader作為組件classloader的父級classloader,由于加載出的A類與加載出的B類屬于不同的文件類型,因而拋出錯誤,導致加載組件失敗,組件加載成功率低。
[0012]為了提升組件的加載成功率,在進行組件設計時,程序員應盡量避免A類繼承B類,從而可以避免加載組件的類加載器與加載組件繼承的父類的類加載器不屬于同一classloader的情形,以提升組件加載的成功率。但該方法,限制了組件設計的靈活性,給組件中加入自定義類的編碼帶來不便,并影響組件中自定義類功能的擴展,限制了組件個性化功能的實現(xiàn)。

【發(fā)明內(nèi)容】

[0013]有鑒于此,本發(fā)明實施例提供一種自定義類的加載方法及裝置,有效擴展組件中自定義類功能,提升組件中自定義類設計的靈活性。
[0014]為達到上述目的,本發(fā)明的實施例采用如下技術方案:
[0015]—方面,本發(fā)明實施例提供一種自定義類的加載方法,包括:
[0016]接收第一自定義類的加載請求,查詢所述第一自定義類是否繼承有第二自定義類,如果有,獲取所述第一自定義類的類加載器鏈;
[0017]在獲取的所述類加載器鏈中,查找到加載所述第二自定義類的類加載器;
[0018]提取所述第二自定義類的類加載器中預先設置的加載目錄,并將提取的加載目錄添加到所述類加載器鏈中用于加載所述第一自定義類的類加載器的加載路徑中;
[0019]刪除所述類加載器鏈中除所述第一自定義類的類加載器之外的自定義類加載器,得到更新的類加載器鏈;
[0020]按照所述更新的類加載器鏈加載所述第一自定義類。
[0021]另一方面,本發(fā)明實施例提供一種自定義類的加載裝置,包括:繼承關系查詢模塊、加載查詢模塊、目錄添加模塊、類加載器鏈更新模塊以及組件加載模塊,其中,
[0022]繼承關系查詢模塊,用于接收第一自定義類的加載請求,查詢所述第一自定義類是否繼承有第二自定義類,如果有,獲取所述第一自定義類的類加載器鏈;
[0023]加載查詢模塊,用于在獲取的所述類加載器鏈中,查找到加載所述第二自定義類的類加載器;
[0024]目錄添加模塊,用于提取所述第二自定義類的類加載器中預先設置的加載目錄,并將提取的加載目錄添加到所述類加載器鏈中用于加載所述第一自定義類的類加載器的加載路徑中;
[0025]類加載器鏈更新模塊,用于刪除所述類加載器鏈中除所述第一自定義類的類加載器之外的自定義類加載器,得到更新的類加載器鏈;
[0026]組件加載模塊,用于按照所述更新的類加載器鏈加載所述第一自定義類。
[0027]本發(fā)明實施例提供的自定義類的加載裝置,繼承關系查詢模塊在加載組件的自定義類時,確定待加載的自定義類繼承了第二自定義類,加載查詢模塊查找到加載所述第二自定義類的類加載器,目錄添加模塊將加載第二自定義類的類加載器中的/vendor/lib目錄以及/system/lib目錄添加到加載組件的自定義類的類加載器的加載路徑中,類加載器鏈更新模塊通過刪除組件的自定義類鏈上除鏈頭之外的所有可加載自定義類的類加載器以更新組件的自定義類鏈,組件加載模塊按照更新的組件的自定義類鏈加載組件,從而能夠使得加載自定義類以及組件和應用程序中共有的自定義類的類加載器屬于同一類加載器,有效擴展了組件中自定義類功能,提升了組件中自定義類設計的靈活性。
【附圖說明】
[0028]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
[0029]圖1為本發(fā)明實施例提供的自定義類的加載方法流程示意圖;
[0030]圖2為本發(fā)明實施例提供的自定義類的加載裝置結構示意圖;
[0031]圖3為本發(fā)明實施例提供的自定義類的加載裝置具體結構示意圖。
【具體實施方式】
[0032]下面結合附圖對本發(fā)明實施例進行詳細描述。
[0033]應當明確,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。
[0034]圖1為本發(fā)明實施例提供的自定義類的加載方法流程示意圖。參見圖1,該方法包括:
[0035]步驟101,接收第一自定義類的加載請求,查詢所述第一自定義類是否繼承有第二自定義類,如果有,獲取所述第一自定義類的類加載器鏈;
[0036]本步驟中,作為一可選實施例,第一自定義類的為組件自定義類,第二自定義類
當前第1頁1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
凭祥市| 贵港市| 佛冈县| 萨嘎县| 松江区| 蒲城县| 中方县| 巴林右旗| 宣汉县| 额敏县| 镇江市| 巨野县| 建湖县| 林州市| 略阳县| 当涂县| 祁门县| 碌曲县| 鄂托克前旗| 沽源县| 鄂伦春自治旗| 兴安盟| 新和县| 河津市| 沿河| 循化| 高清| 屯昌县| 奉化市| 盖州市| 罗甸县| 普安县| 马龙县| 平果县| 霍山县| 芮城县| 井陉县| 延边| 德令哈市| 钟祥市| 漯河市|