當(dāng)前位置:首頁(yè) > IT技術(shù) > 其他 > 正文

用戶自定義類(lèi)加載器及具體實(shí)現(xiàn)
2022-05-11 11:00:11


用戶自定義類(lèi)加載器

在Java的日常應(yīng)用程序開(kāi)發(fā)中,類(lèi)的加載幾乎是由上節(jié)3種類(lèi)加載器(引導(dǎo)、擴(kuò)展和系統(tǒng)類(lèi)加載器)相互配合執(zhí)行的,在必要時(shí),我們還可以自定義類(lèi)加載器,來(lái)定制類(lèi)的加載方式。

為什么要自定義類(lèi)加載器

  • 隔離加載類(lèi)
  • 修改類(lèi)加載的方式
  • 擴(kuò)展加載源
  • 防止源碼泄漏

用戶自定義類(lèi)加載器實(shí)現(xiàn)步驟

用戶自定義類(lèi)加載器及具體實(shí)現(xiàn)_加載

關(guān)于ClassLoader

ClassLoader類(lèi),它是一個(gè)抽象類(lèi),其后所有的類(lèi)加載器都繼承自ClassLoader(不包括啟動(dòng)類(lèi)加載器)

用戶自定義類(lèi)加載器及具體實(shí)現(xiàn)_java_02

獲取ClassLoader的幾種方

用戶自定義類(lèi)加載器及具體實(shí)現(xiàn)_加載_03

雙親委派機(jī)制

Java虛擬機(jī)對(duì)class文件采用的是按需加載的方式,也就是說(shuō)當(dāng)需要使用該類(lèi)時(shí)才會(huì)將它的class文件加載到內(nèi)存生成class對(duì)象。而且加載某個(gè)類(lèi)的class文件時(shí),Java虛擬機(jī)采用的是雙親委派模式,即把請(qǐng)求交由父類(lèi)處理,它是一種任務(wù)委派模式。

案例分析:

我們自己創(chuàng)建一個(gè) java.lang.String,當(dāng)我們使用String這個(gè)類(lèi)的時(shí)候,是加載我們自己寫(xiě)的String類(lèi)還是系統(tǒng)給我們提供的String類(lèi)呢???顯然是系統(tǒng)提供的String。

package chapter01.com.wust.yq;

public class StringTest {

public static void main(String[] args) {
java.lang.String s = new java.lang.String();
System.out.println("hello");
}

}

用戶自定義類(lèi)加載器及具體實(shí)現(xiàn)_類(lèi)加載器_04

用戶自定義類(lèi)加載器及具體實(shí)現(xiàn)_加載_05

工作原理

用戶自定義類(lèi)加載器及具體實(shí)現(xiàn)_類(lèi)加載器_06

優(yōu)勢(shì)

用戶自定義類(lèi)加載器及具體實(shí)現(xiàn)_java_07


本文摘自 :https://blog.51cto.com/u

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >