在專案中有時為了實現熱部署,需要動態載入指定路徑下的.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會載入使用者自定義的 應...