亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

線程上下文類裝入器與普通類加載器的區別

線程上下文類裝入器與普通類加載器的區別

一只甜甜圈 2019-07-19 10:48:16
線程上下文類裝入器與普通類加載器的區別線程的上下文類裝入器和普通的類加載器之間有什么區別?也就是說,如果Thread.currentThread().getContextClassLoader()和getClass().getClassLoader()返回不同的類加載器對象,將使用哪一個?
查看完整描述

3 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

每個類將使用自己的類加載器加載其他類。所以如果ClassA.class參考文獻ClassB.class然后ClassB的類加載器的類路徑上。ClassA或者它的父母。

線程上下文類加載器是當前線程的當前類加載器。中的類創建對象。ClassLoaderC然后傳遞給ClassLoaderD..在這種情況下,對象需要使用Thread.currentThread().getContextClassLoader()如果它希望加載它自己的類加載器上不可用的資源,則直接加載。


查看完整回答
反對 回復 2019-07-19
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

這并不能回答原來的問題,但因為這個問題的排名很高,而且對任何一個問題都有關聯。ContextClassLoader查詢,我認為重要的是回答相關的問題,什么時候應該使用上下文類加載器。簡短答覆:不要使用上下文類加載器。!但是把它設置為getClass().getClassLoader()當您必須調用缺少ClassLoader參數。

當一個類的代碼請求加載另一個類時,要使用的正確的類加載器與調用方類相同。(即getClass().getClassLoader())。99.9%的情況是這樣的,因為這就是jvm自己所做的。第一次構造新類的實例、調用靜態方法或訪問靜態字段時。

當您希望使用反射(例如反序列化或加載可配置的命名類)創建類時,執行反射的庫應該總是詢問應用程序通過接收ClassLoader作為應用程序的參數。應用程序(它知道所有需要構造的類)應該傳遞它。getClass().getClassLoader().

獲得類加載器的任何其他方法都是不正確的。如果庫使用諸如Thread.getContextClassLoader()sun.misc.VM.latestUserDefinedLoader(),或sun.reflect.Reflection.getCallerClass()這是一個由API缺陷引起的錯誤。基本上,Thread.getContextClassLoader()存在的唯一原因是,無論是誰設計了ObjectInputStreamAPI忘記接受ClassLoader作為一個參數,這個錯誤至今一直困擾著Java社區。

也就是說,許多JDK類使用少數幾個黑客中的一個來猜測要使用的類加載器。有些人使用ContextClassLoader(當您在共享線程池上運行不同的應用程序時,或者當您離開ContextClassLoader null),有些人在堆棧中行走(當類的直接調用者本身是一個庫時,堆棧就會失敗),有些人使用系統類裝入器(這很好,只要文檔中只使用CLASSPATH)或者引導類加載器,并且有些使用上述技術的不可預測的組合(這只會使事情變得更加混亂)。這導致了大量的哭泣和咬牙切齒。

當使用這樣的API時,首先,嘗試查找接受類加載器作為參數的方法的重載。..如果沒有合理的方法,請嘗試將ContextClassLoader在API調用之前(然后重新設置它):

ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();try {
    Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
    // call some API that uses reflection without taking ClassLoader param} finally {
    Thread.currentThread().setContextClassLoader(originalClassLoader);}


查看完整回答
反對 回復 2019-07-19
  • 3 回答
  • 0 關注
  • 1216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號