1. 程式人生 > >05執行緒上下文類載入器

05執行緒上下文類載入器

在JDK1.2後,可以使用getContextClassLoader()和setContextClassLoader()來獲取和設定當前執行緒的上下文類載入器,如果沒有設定,預設與父執行緒一致。

Java 提供了很多服務提供者介面(Service Provider Interface,SPI),允許第三方為這些介面提供實現。常見的 SPI 有 JDBC、JCE、JNDI、JAXP 和 JBI 等。

這些 SPI 的介面由 Java 核心庫來提供,而這些 SPI 的實現程式碼則是作為 Java 應用所依賴的 jar 包被包含進類路徑(CLASSPATH)裡。SPI介面中的程式碼經常需要載入具體的實現類

。那麼問題來了,SPI的介面是Java核心庫的一部分,是由啟動類載入器(Bootstrap Classloader)來載入的;SPI的實現類是由系統類載入器(System ClassLoader)來載入的。引導類載入器是無法找到 SPI 的實現類的,因為依照雙親委派模型,BootstrapClassloader無法委派AppClassLoader來載入類。

而執行緒上下文類載入器破壞了“雙親委派模型”,可以在執行執行緒中拋棄雙親委派載入鏈模式,使程式可以逆向使用類載入器。

例如slf4j只是log的標準介面庫,而slf4j-log4j只是其中一個實現,在真實專案中,通常由同一個類載入器進行載入,就不至於像資料庫驅動一樣繞了一圈載入

相關推薦

05執行上下文載入

在JDK1.2後,可以使用getContextClassLoader()和setContextClassLoader()來獲取和設定當前執行緒的上下文類載入器,如果沒有設定,預設與父執行緒一致。 Java 提供了很多服務提供者介面(Service Provider Inte

Java執行上下文載入與SPI

執行緒上下文類載入器(context class loader)是從JDK 1.2開始引入的。類 java.lang.Thread中的方法getContextClassLoader()和setContextClassLoader(ClassLoader cl)用來獲取和設定

真正理解執行上下文載入(多案例分析)

前言 此前我對執行緒上下文類載入器(ThreadContextClassLoader,下文使用TCCL表示)的理解僅僅侷限於下面這段話: Java 提供了很多服務提供者介面(Service Provider Interface,SPI),允許第

執行上下文載入(Context ClassLoader)

1.執行緒上下文類載入器是從jdk1.2開始引入的,類Thread中的getContextClassLoader()與setContextClassLoader(ClassLoader c1),分別用來獲取和設定類載入器如果沒有通過setContextClassLoader方

雙親委派模型和執行上下文載入

最近在讀《架構探險-從零開始寫java web框架》一書時,看到了一個獲取類載入器的地方是這樣寫的: public static ClassLoader getClassLoad

深入載入----執行上下文載入

            深入類載入器(四)----執行緒上下文切換類載入器                       執行緒上下文類載入器 我們知道在java中的載入器的載入模式是雙親委託模式,

載入 - 自定義系統載入執行上下文載入

自定義系統類載入器 ClassLoader.getSystemClassLoader()方法詳解 方法說明 返回用於委託的系統類載入器,它是新建ClassLoader例項的預設的委託雙親,通常也是啟動應用的類載入器。 這個方法在執行啟動期間很早的時候就被呼叫,在呼叫時首先會建立系統載入器,而且會將其設定為呼

執行上下文載入ContextClassLoader記憶體洩漏隱患

前提 今天(2020-01-18)在編寫Netty相關程式碼的時候,從Netty原始碼中的ThreadDeathWatcher和GlobalEventExecutor追溯到兩個和執行緒上下文類載入器ContextClassLoader記憶體洩漏相關的Issue: ThreadDeathWatcher cau

可怕的執行上下文裝載(TCCL)

在明天的 OSGi 2012 社群活動上,我將以“如何使你的類庫在不依賴 OSGi 的情況下進行友好地 OSGi”為主題進行演講。在演講中我將會提及 Java 的執行緒上下文類載入器(TCCL),但是整個演講只有 25 分鐘,我沒有更多時間對此進行深入討論。所以我寫這篇部落格

十一、JAVA多執行執行上線文載入

       執行緒上下文類載入器(context class loader)是從 JDK 1.2 開始引入的。類 java.lang.Thread中的方法 getContextClassLoader()和 setContextC

十、JAVA多執行:JVM載入(自動載入、雙親委託機制、載入名稱空間、執行時包、的解除安裝等)

  Jvm提供了三大內建的類載入器,不同的類載入器負責將不同的類載入到記憶體之中 根載入器(Bootstrap ClassLoader) 是最頂層的載入器,是由C++編寫的,主要負責虛擬機器核心類庫的載入,如整個java.lang包,根載入器是獲取不到引用的,因此

Java載入( CLassLoader ) 死磕9: 上下文載入原理和案例

【正文】Java類載入器(  CLassLoader ) 死磕9:  上下文載入器原理和案例 本小節目錄 9.1. 父載入器不能訪問子載入器的類 9.2. 一個寵物工廠介面 9.3. 一個寵物工廠管理類 9.4 APPClassLoader不能訪問子載入器中的類 9.5. 執行緒上下文

九、JAVA多執行載入過程

           ClassLoader的主要職責就是負責載入各種class檔案到jvm中,ClassLoader是一個抽象的class,給定一個class的二進位制檔名,ClassLoader會嘗試載入並且在JVM中生成構成這個類

Java虛擬機器結構(記憶體,載入執行引擎)

1. JVM背景知識 1995年,Java誕生於Sun公司。目標:Write Once, Run Anywhere。 2006年,Sun宣佈Java開源,並在隨後1年,陸續將JDK的各部分在GPL v2協議下公開原始碼,並建立OpenJDK組織,對原始

JVM——深入解析原理和執行機制(一)載入

      上次我們說了一下jvm中類載入的過程,大概有載入,連線(驗證,準備,解析),初始化這麼幾個步驟,當然要實現這些功能就需要有載入器,今天我們就來說說jvm中的類載入器。 一、分類

java載入——ClassLoader

web rac rgb 好的 全盤負責機制 安全 trac 字節 如何 Java的設計初衷是主要面向嵌入式領域,對於自己定義的一些類,考慮使用依需求載入原則。即在程序使用到時才載入類,節省內存消耗,這時就可以通過類載入器來動態載入。 假設你平時僅僅是做web開發,那應該

Java載入 ClassLoader的解析

index html dir obj ble body 6.4 odin 普通 //參考 : http://www.ibm.com/developerworks/cn/java/j-lo-classloader/ 類載入器基本概念 類載

finalkeyword對JVM載入的影響

public fin port args stat gpo sys tint () 眾所周知,當訪問一個類的變量或方法的時候。假設沒有初始化該類。就會先去初始化一個類 可是,當這個類的變量為final的時候,就

執行 Thread

程序與執行緒         程序是指一個記憶體中執行的應用程式,每個程序都有自己獨立的一塊記憶體空間,即程序空間或(虛空間)。程序不依賴於執行緒而獨立存在,一個程序中可以啟動多個執行緒。比如在Windows系統中,一個執行的exe就是一個程序。 &n

JAVA載入詳解

Java類載入器的作用就是在執行時載入類。Java類載入器基於三個機制:委託、可見性和單一性。委託機制是指將載入一個類的請求交給父類載入器,如果這個父類載入器不能夠找到或者載入這個類,那麼再載入它。可見性的原理是子類的載入器可以看見所有的父類載入器載入的類,而父類載入器看不到子類載入器載入的