自定義類載入器

2021-08-09 20:00:43 字數 1270 閱讀 7926

注: class.forname(name, initialize, loader)帶參函式也可控制是否載入static塊。並且只有呼叫了newinstance()方法採用呼叫建構函式,建立類的物件 。

如果乙個類載入器收到了類載入的請求,它首先不會自己去嘗試載入這個類,而是把請求委託給父載入器去完成,依次向上,因此,所有的類載入請求最終都應該被傳遞到頂層的啟動類載入器中,只有當父載入器在它的搜尋範圍中沒有找到所需的類時,即無法完成該載入,子載入器才會嘗試自己去載入該類。

classload原始碼:

protected class<?> loadclass(string name, boolean resolve) throws classnotfoundexception  else 

} catch (classnotfoundexception e) {}

//若父載入器和啟動類載入器都無法載入類,在自己嘗試載入

if (c == null)

}if (resolve)

return c;

}}

首先介紹幾個關鍵的方法
了解了這幾個方法,我們知道重寫類載入器主要是重寫findclass方法,下面就是乙個自定義的類載入器的例子。

/**

* created by sjk on 2017/8/16.

* 通過.class檔案路徑動態載入類

*/public

class

myclassloader

extends

classloader else

}/**

* 讀取檔案流轉化為byte陣列

**@param path 路徑

*@return

*/private

byte loadclassdata(string path)

return bos.tobytearray();

} catch (exception e)

}private string getclassname(string name)

//去除.class檔案字尾

if (name.indexof(".") != -1)

//取檔名 例: ***/***/a --> a

if (name.lastindexof(file.separator) != -1)

return name;

}}

自定義類載入器

我們自己約定的需求如下,我們從外部路徑 tmp myclasspath 載入類 具體實現如下 public class myclassloader extends classloader catch ioexception e 測試 public static void main string ar...

JAVA類載入機制以及如何自定義類載入器

雙親委派機制描述 本文主要以tomcat7為例說明類載入機制,大家也可以參考tomcat7的類載入機制的官方文件。tomcat7總的classloader結構如下圖 各個類載入器載入類的範圍 載入順序預設如下 如果設定了,載入順序如下 jdk的解釋是這樣的 並不是給執行緒設定了contextclas...

實現java中自定義類載入器

前言 由於類的載入是採用委託模式,及先是父類載入器去載入載入失敗才是子類 要實現乙個類載入器不是複寫loadclass而是複寫findclass 原始碼主要邏輯就幾句 注意 這個findclass呼叫的原始碼 protected class loadclass string name,boolean...