如果一個類收到了類加載請求,它并不會自己先去加載,而是會把這個請求委托給父類的加載器執行。如果父加載器還存在其父加載器,則再進一步向上委托,依次遞歸,請求將最終到達頂層的啟動類加載器。如果父類加載器可以完成加載任務,就成功返回;如果父加載器無法完成加載任務,子加載器才會嘗試自己去加載,這就是雙親委派模型。
雙親委派模式的優勢:
- 避免重復加載;
- 考慮到安全因素,java核心api中定義類型不會被隨意替換,假設通過網絡傳遞一個名為java.lang.Integer的類,通過雙親委派模式傳遞到啟動加載器,而啟動加載器在核心Java API中發現同名的類,發現該類已經被加載,就不會重新加載網絡傳遞的Integer類,而直接返回已加載過的Integer.class,這樣可以防止核心API庫被隨意篡改。