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