欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

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

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

[0013]有鑒于此,本發(fā)明實(shí)施例提供一種自定義類的加載方法及裝置,有效擴(kuò)展組件中自定義類功能,提升組件中自定義類設(shè)計(jì)的靈活性。
[0014]為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0015]—方面,本發(fā)明實(shí)施例提供一種自定義類的加載方法,包括:
[0016]接收第一自定義類的加載請(qǐng)求,查詢所述第一自定義類是否繼承有第二自定義類,如果有,獲取所述第一自定義類的類加載器鏈;
[0017]在獲取的所述類加載器鏈中,查找到加載所述第二自定義類的類加載器;
[0018]提取所述第二自定義類的類加載器中預(yù)先設(shè)置的加載目錄,并將提取的加載目錄添加到所述類加載器鏈中用于加載所述第一自定義類的類加載器的加載路徑中;
[0019]刪除所述類加載器鏈中除所述第一自定義類的類加載器之外的自定義類加載器,得到更新的類加載器鏈;
[0020]按照所述更新的類加載器鏈加載所述第一自定義類。
[0021]另一方面,本發(fā)明實(shí)施例提供一種自定義類的加載裝置,包括:繼承關(guān)系查詢模塊、加載查詢模塊、目錄添加模塊、類加載器鏈更新模塊以及組件加載模塊,其中,
[0022]繼承關(guān)系查詢模塊,用于接收第一自定義類的加載請(qǐng)求,查詢所述第一自定義類是否繼承有第二自定義類,如果有,獲取所述第一自定義類的類加載器鏈;
[0023]加載查詢模塊,用于在獲取的所述類加載器鏈中,查找到加載所述第二自定義類的類加載器;
[0024]目錄添加模塊,用于提取所述第二自定義類的類加載器中預(yù)先設(shè)置的加載目錄,并將提取的加載目錄添加到所述類加載器鏈中用于加載所述第一自定義類的類加載器的加載路徑中;
[0025]類加載器鏈更新模塊,用于刪除所述類加載器鏈中除所述第一自定義類的類加載器之外的自定義類加載器,得到更新的類加載器鏈;
[0026]組件加載模塊,用于按照所述更新的類加載器鏈加載所述第一自定義類。
[0027]本發(fā)明實(shí)施例提供的自定義類的加載裝置,繼承關(guān)系查詢模塊在加載組件的自定義類時(shí),確定待加載的自定義類繼承了第二自定義類,加載查詢模塊查找到加載所述第二自定義類的類加載器,目錄添加模塊將加載第二自定義類的類加載器中的/vendor/lib目錄以及/system/lib目錄添加到加載組件的自定義類的類加載器的加載路徑中,類加載器鏈更新模塊通過刪除組件的自定義類鏈上除鏈頭之外的所有可加載自定義類的類加載器以更新組件的自定義類鏈,組件加載模塊按照更新的組件的自定義類鏈加載組件,從而能夠使得加載自定義類以及組件和應(yīng)用程序中共有的自定義類的類加載器屬于同一類加載器,有效擴(kuò)展了組件中自定義類功能,提升了組件中自定義類設(shè)計(jì)的靈活性。
【附圖說明】
[0028]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
[0029]圖1為本發(fā)明實(shí)施例提供的自定義類的加載方法流程示意圖;
[0030]圖2為本發(fā)明實(shí)施例提供的自定義類的加載裝置結(jié)構(gòu)示意圖;
[0031]圖3為本發(fā)明實(shí)施例提供的自定義類的加載裝置具體結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0032]下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)描述。
[0033]應(yīng)當(dāng)明確,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0034]圖1為本發(fā)明實(shí)施例提供的自定義類的加載方法流程示意圖。參見圖1,該方法包括:
[0035]步驟101,接收第一自定義類的加載請(qǐng)求,查詢所述第一自定義類是否繼承有第二自定義類,如果有,獲取所述第一自定義類的類加載器鏈;
[0036]本步驟中,作為一可選實(shí)施例,第一自定義類的為組件自定義類,第二自定義類
當(dāng)前第1頁1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
抚宁县| 鹤壁市| 凯里市| 临清市| 兴海县| 清流县| 喀喇沁旗| 宜兴市| 盖州市| 盐山县| 临夏市| 盱眙县| 南阳市| 井研县| 龙江县| 眉山市| 周宁县| 巴东县| 古丈县| 苏尼特左旗| 洞头县| 洛扎县| 栾川县| 商洛市| 方城县| 改则县| 元阳县| 鄂州市| 册亨县| 新邵县| 莱芜市| 阿拉善左旗| 宁夏| 桃江县| 迁西县| 宣汉县| 大石桥市| 吴江市| 龙泉市| 南汇区| 玉林市|