類載入器ClassLoader

2021-09-26 04:12:06 字數 925 閱讀 5956

在專案中有時為了實現熱部署,需要動態載入指定路徑下的.class檔案

一般很少使用自定義的類載入器,而是用urlclassloader去載入指定路徑下的.class檔案

urlclassloader 預設是去載入jar包下的.class檔案

public static void main(string args) throws classnotfoundexception, ioexception 

private static list> getfiles(file file) throws classnotfoundexception, ioexception

file files=file.listfiles();

for(file f:files)

else if (f.getname().endswith(".jar")) );

jarfile jarfile=new jarfile(f);

enumerationjarentries=jarfile.entries();

while(jarentries.hasmoreelements())

}} }

return classlist;

}

上述**僅針對特定檔案結構可以根據實際情況完善

下面記錄一下**中存在的坑:

① 當用本地檔案路徑生成url時,必須在前面加上「file:」

② 新建的urlclassloader在預設情況下是指的jar包的url,而f.getabsolutepath()也只能獲得本地的檔案路徑,需要在前面加上「file:」

③ jarentry.getname() 獲取的名字是***/***/*** 的格式,所以需要將「/」替換為「.」 ,即packagename.classname 格式。

ClassLoader學習和類載入器載入Jar檔案

類載入器,參考 本文主要的實現的功能是把乙個jar檔案載入到classloader中 原理 把jar檔案載入成url,通過構造乙個urlclassloader,把原來的classloader和jar檔案合併 準備檔案 helloword.jar 其中內容為 package master.classl...

ClassLoader對類的級聯載入

在乙個classloader例項中,如果載入某個class,那麼被載入的class是屬於該classloader所定義的namespace之內的。表現為不同的classloader例項雖然載入的class完全相同,但是不能夠相互型別轉化,而且不能夠通過型別轉換成其他classloader載入的類。但...

類載入ClassLoader和雙親委派機制

類載入器的發生時間是在類載入過程的載入階段發生的。1.bootstrap class loader會載入rt.jar下面的c 啟動類載入器 2.extension class loader會載入ext jar下面的 擴充套件類載入器 3.system class loader會載入使用者自定義的 應...