Thread.getContextClassLoader與Thread.getClassLoader()區別

在閱讀spring boot啟動時候的源碼中,發現獲取classLoader使用的是getContextClassLoader于是乎產生了疑問,這種獲取ClassLoader的方式與我們最常見的通過Class.getClassLoader二者有什么區別?都是在什么場景下使用呢?

首先來看看getClassLoader()方法的注釋:

Returns the class loader for the class. Some implementations may use null to represent the bootstrap class loader. This method will return null in such implementations if this class was loaded by the bootstrap class loader.
主要的意思是getClassLoader()返回該類的類加載器,如果是bootstrap加載器加載的類返回Null,這種機制主要是為了安全考慮bootstrap是用來加載jvm核心庫的加載器不允許暴露給用戶操作,可能會引起類沖突的問題。

再來看一下getContextClassLoader()方法的說明:
Sets the context ClassLoader for this Thread. The context ClassLoader can be set when a thread is created, and allows the creator of the thread to provide the appropriate class loader, through getContextClassLoader, to code running in the thread when loading classes and resources.
這個方法返回叫線程上下文類加載器。這個加載器的類型指定的工作交給了線程創建者,創建者在創建線程之后用對應的setContextClassLoader()方法將適合的類加載器設置到線程中,那么線程中的代碼就可以通過getContextClassLoader()獲取到這個類加載器來加載類或者資源。如果不設置默認是系統類加載器就是 app ClassLoader()。

那么這個getContextLoader()方法在什么場景下使用呢? 因為很多框架為了做類的隔離會通過不同的ClassLoader來做類的隔離。假設框架提供了一個可擴展的服務接口這個接口的類加載器是app ClassLoader,但是這個接口是現實則交給使用者來擴展,那么實現類很有可能被自定義的ClassLoader加載導致appClassLoader無法找到實現類。如果在框架的層面希望能夠獲取到接口實現類就需要將實現類用getContextClassLoader獲得的ClassLoader來加載。

總之,getContextClassLoader是原有代理類加載模式的一種補充。提供一種在子ClassLoader加載的類中獲取父ClassLoader的實例來操作父加載器加載類的方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249572.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ssl 的jks 生成工具

https://www.myssl.cn/tools/merge-jks-cert.html 通過key 私鑰 ,和公鑰pem 生成jks 轉載于:https://www.cnblogs.com/vana/p/9594298.html

NOIP模擬賽10 題解

t3: 題意 給你一棵樹,然后每次兩種操作:1.給一個節點染色 ; 2. 查詢一個節點與任意已染色節點 lca 的權值的最大值 分析 考慮一個節點被染色后的影響:令它的所有祖先節點(包括自身)的所有除去更…

洛谷 P1136 迎接儀式 解題報告

P1136 迎接儀式 題目描述 LHX教主要來X市指導OI學習工作了。為了迎接教主,在一條道路旁,一群Orz教主er穿著文化衫站在道路兩旁迎接教主,每件文化衫上都印著大字。一旁的Orzer依次擺出“歡迎歡迎歡迎歡迎……”的大字,但是領隊突然…

spring源碼分析-core.io包里面的類

前些日子看《深入理解javaweb開發》時,看到第一章java的io流,發覺自己對io流真的不是很熟悉。然后看了下JDK1.7中io包的一點點代碼,又看了org.springframework.core.io包的一些類和組織方式,當作是學習吧。總結一下。 先掛下spri…

對類Vue的MVVM前端庫的實現

關于實現MVVM,網上實在是太多了,本文為個人總結,結合源碼以及一些別人的實現 關于雙向綁定 vue 數據劫持 訂閱 - 發布ng 臟值檢查backbone.js 訂閱-發布(這個沒有使用過,并不是主流的用法)雙向綁定,從最基本的實現來說…

java.util.prefs.Preferences

我們經常需要將我們的程序中的設定,如窗口位置,開啟過的文件,用戶的選項設定等數據記錄下來,以做便用戶下一次開啟程序能繼續使用這些數據。 以前我們通常的做法是使用Properties類,它提供以下方法: void load(InputS…

django的母板系統

一.母板渲染語法 1.變量 {{ 變量 }} 2.邏輯 {% 邏輯語 %} 二.變量 在母板中有變量時,母板引擎會去反向解析找到這個傳來的變量,然后替換掉. .(點),在母板中是深度查詢據點符,它的查詢順序: 字典 > 屬性或方法 > 數字索引 三.過濾器 1.語法 {{ value|filter_name:參數}} 2…

python學習總結----時間模塊 and 虛擬環境(了解)

python學習總結----時間模塊 and 虛擬環境(了解) time- sleep:休眠指定的秒數(可以是小數) - time:獲取時間戳# 獲取時間戳(從1970-01-01 00:00:00到此刻的秒數)t time.time()print(t) - localtime:將時間戳轉換為對象…

【CSS】flex的常用布局

1、垂直居中&#xff0c;寫在父級上div{display: flex;justify-content: center;align-items: center; } 2、flex-左右兩端&#xff0c;垂直居中該布局在移動端較為常見<style> .wrap{display: flex;justify-content: space-between;align-items: center;width: 200px;he…

java.util.Properties

ava.util.Properties是對properties這類配置文件的映射。支持key-value類型和xml類型兩種 首先&#xff0c;新建一個文件&#xff0c;如圖&#xff1a; 然后再Java代碼段輸入如下代碼&#xff1a; import java.io.FileInputStream; import java.io.InputStream; import java…

Xpath使用方法

Xpath使用方法 注&#xff1a;默認死格式 先寫 //* 代表定位頁面下所有元素 1、Xpath支持ID、Class、Name定位功能 通過ID定位 //*[idkw]通過Class定位//*[classclass_name]通過Name定位//*[namename]-----------------------------------------------------------------------…

為什么這么多爛代碼?

在國內&#xff0c;有經驗的程序員都當領導了&#xff0c;領導又不寫代碼&#xff0c;那代碼只能讓剛入行的新手寫了&#xff0c;然后就是隨意堆砌&#xff0c;完成功能就行&#xff0c;所以目前我盡量不寫爛代碼&#xff0c;并盡量堅持改造已有的爛代碼&#xff0c;在我眼中&a…

Spring-boot 打成jar包后使用外部配置文件

官網說明 第一種是在jar包的同一目錄下建一個config文件夾&#xff0c;然后把配置文件放到這個文件夾下&#xff1b; 第二種是直接把配置文件放到jar包的同級目錄&#xff1b; 第三種在classpath下建一個config文件夾&#xff0c;然后把配置文件放進去&#xff1b; 第四種是在c…

acm模板生成

為迎接&#xff0c;接下來的區域賽&#xff0c;要做好準備(雖然不是特別有信心&#xff0c;但是還是要鼓勵自己&#xff0c;可以取得收獲的&#xff0c;加油) acm_latex模板&#xff1a; https://www.cnblogs.com/palayutm/p/6444833.html#e69bb4e696b0_1 windows下安裝texlive…

UI自動化之元素定位(xpath、css)

很早之前就已經寫過自動化了&#xff0c;不過點著功能久了就會容易忘記元素定位&#xff0c;尤其是xpath和css定位&#xff0c;所以就花點時間做下總結收集。 xpath有兩種定位&#xff1a; 一.絕對路徑&#xff08;不推薦使用&#xff0c;除非已經使用了所有方式仍然無法定位&a…

屬性編輯器PropertyEditor

在Spring配置文件里&#xff0c;我們往往通過字面值為Bean各種類型的屬性提供設置值&#xff1a;不管是double類型還是int類型&#xff0c;在配置文件中都對應字符串類型的字面值。BeanWrapper填充Bean屬性時如何將這個字面值轉換為對應的double或int等內部類型呢&#xff1f;我…

郵箱驗證

public class Emailstandard { /* * 以數字或字母開頭 * 之前可以含有數字,字母,下劃線,點 * 有且只有一個 * 之后只能含有數字,字母 * 必須以.com或者.cn結尾 * */ public static void main(String[] args) { Scanner sca new Scanner(…

python第二十八課——編碼小常識

2.內存和硬盤&#xff1a;內存&#xff1a;計算機硬件組成部分之一&#xff0c;它是一個容器&#xff0c;用來存儲數據&#xff1b;處理數據速度快&#xff0c;存儲數據量小&#xff1b;斷電死機數據會丟失&#xff0c;短暫性存儲數據硬盤&#xff1a;計算機硬件組成部分之一&a…

Javadoc 使用詳解

很多程序對Javadoc都不重視&#xff0c;認識不到Javadoc的作用&#xff0c;很多人都是這樣認為的&#xff1a;“我只要寫好功能就夠了&#xff0c;寫Javadoc太浪費時間&#xff0c;也沒啥作用&#xff0c;還不如用寫Javadoc的時間再多些個功能呢&#xff01;”&#xff0c;我們…

Linux下查看當前文件大小的命令

1、ls -lht 列出每個文件的大小和當前目錄所有文件大小總和 2、du -sh * 列出當前文件夾下的所有子文件的大小 看你需要啥樣的&#xff0c;自己來吧 轉載于:https://www.cnblogs.com/xbxxf/p/9619818.html