有哪些類載入器?解釋什麼是雙親委派模型,為什麼使用雙親委派模型,如何自定義類載入器?什麼時候應該自定義類載入器?
阿新 • • 發佈:2019-01-22
類載入器:啟動類載入器(bootstrap classLoader),擴充套件類載入器(extension),應用類載入器(Application),自定義類載入器(user ClassLoader);
雙親委派模型:如果一個類載入器收到了載入某個類的請求,則該類載入器並不會去載入該類,而是把這個請求委派給父類載入器,每一個層次的類載入器都是如此,因此所有的類載入請求最終都會傳送到頂端的啟動類載入器;只有當父類載入器在其搜尋範圍內無法找到所需的類,並將該結果反饋給子類載入器,子類載入器會嘗試去自己載入.
使用雙親委派模型原因:java類隨著其類載入器一起具備了一種帶有優先順序的層次關係.例如
為什麼需要自定義類載入器:
1)加密:java程式碼可以輕易的被反編譯,如果你需要對你的程式碼進行加密以防止反編譯,可以先將編譯後的程式碼用加密演算法加密,類加密後就不能再使用java自帶的類載入器了,這時候就需要自定義類載入器
2)從非標準的來源載入程式碼:位元組碼是放在資料庫,甚至是雲端,就可以自定義類載入器,從指定來源載入類.
自定義類載入器的方法:
1、如果不想打破雙親委派模型,那麼只需要重寫findClass方法即可
2、如果想打破雙親委派模型,那麼就重寫整個loadClass方法
private File getClassFile(String name)
{
File file = new File("D:/Person.class");//此處要提前編譯Person類,並把class檔案放到d盤下.
return file;
}