ClassLoader類載入器探索ing...
類加載入器載入型別Demo
public class Test {
public static void main(String[] args) {
//下面三個classLoader是用一個物件
System.out.println(Thread.currentThread().getContextClassLoader()); //當前執行緒的類載入器
System.out.println(Test.class.getClassLoader()); //當前類的類載入器
System.out.println(ClassLoader.getSystemClassLoader()); //系統初始的類載入器
}
}
說明:
可以通過了解openfire對ClassLoader加深理解。
例如: 一個WEB程式,釋出到Tomcat裡面執行。
首先是執行Tomcat org.apache.catalina.startup.Bootstrap類,這時候的類載入器是ClassLoader.getSystemClassLoader()。
而我們後面的WEB程式,裡面的jar、resources都是由Tomcat內部來載入的,所以在程式碼中動態載入jar、資原始檔的時候,首先應該是使用Thread.currentThread().getContextClassLoader()。如果使用Test.class.getClassLoader(),可能會導致和當前執行緒所執行的類載入器不一致(因為Java天生的多執行緒)。
Test.class.getClassLoader()一般用在getResource,因為你想要獲取某個資原始檔的時候,這個資原始檔的位置是相對固定的。
建議檢視一下openfire或者tomcat內部的原始碼,對ClassLoader會有比較深的理解。
在openfire裡面,openfire使用的類載入器,以及每個外掛使用的類載入器都不一樣。
例項運用:獲取properties檔案內容
public class Test{
private static Properties props = new Properties();
static {
try {
//獲得當前上下文類載入器取得properties檔案相對於classPath的路徑(實際上也是絕對路徑)
props.load(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("conf/alipay.properties" ));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//獲取properties檔案內容
public static String getContext(String key) {
return props.getProperty(key);
}
}
後續補充中…
相關推薦
ClassLoader類載入器探索ing...
類加載入器載入型別Demo public class Test { public static void main(String[] args) { //下面三個classLoader
Java基礎之ClassLoader類載入器簡介
classloader簡介 1 classloader層次結構(父子關係) Bootstrap(ClassLoader) ExtClassLoader AppClassLoader XXXClassLoader 詳見程
classloader類載入器
與普通程式不同的是,Java程式(class檔案)並不是本地的可執行程式。當執行Java程式時,首先執行JVM(Java虛擬機器),然後再 把Java class載入到JVM裡頭執行,負責載入Java class的這部分就叫做Class Loader。 JVM本身包含了一
JVM原始碼分析--ClassLoader類載入器
本人原創,轉載請註明出處:https://www.cnblogs.com/javallh/p/10224187.html 1、JDK已有類載入器: BootStrap ClassLoader (啟動類載入器) 執行的是rt.jar 原始碼由C++
利用ClassLoader類載入器獲取專案資源和用class獲取專案資源
首先看想專案中的目錄 在專案中有兩個a.html 一個在專案中 另一個在專案的報下 在Demo2.java這個檔案中建立程式碼來實現用兩個方法來訪問專案資源 Java程式碼入下 package cc; import java.io.IOException; impo
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/ 類載入器基本概念 類載
Java類載入器( CLassLoader ) 死磕9: 上下文載入器原理和案例
【正文】Java類載入器( CLassLoader ) 死磕9: 上下文載入器原理和案例 本小節目錄 9.1. 父載入器不能訪問子載入器的類 9.2. 一個寵物工廠介面 9.3. 一個寵物工廠管理類 9.4 APPClassLoader不能訪問子載入器中的類 9.5. 執行緒上下文
Java類載入器( CLassLoader ) 死磕 6: 自定義網路類載入器
【正文】Java類載入器( CLassLoader ) 死磕 6: 自定義網路類載入器 本小節目錄 6.1. 自定義網路類載入器的類設計 6.2. 檔案傳輸Server端的原始碼 6.3. 檔案傳輸Client端的原始碼 6. 4 自定義載入器SocketClassLoader的原始
Java類載入器( CLassLoader ) 死磕8: 使用ASM,和類載入器實現AOP
【正文】Java類載入器( CLassLoader ) 死磕8: 使用ASM,和類載入器實現AOP 本小節目錄 8.1. ASM位元組碼操作框架簡介 8.2. ASM和訪問者模式 8.3. 用於增強位元組碼的事務類 8.4 通過ASM訪問註解 8.5. 通過ASM注入AOP事務程式
Java類載入器( CLassLoader ) 死磕7: 基於加密的自定義網路載入器 本小節目錄
【正文】Java類載入器( CLassLoader ) 死磕7: 基於加密的自定義網路載入器 本小節目錄 7.1. 加密傳輸Server端的原始碼 7.2. 加密傳輸Client端的原始碼 7.3. 使用亦或實現簡單加密和解密演算法 7. 網路加密SafeClassLoader的原
Java類載入器( CLassLoader ) 死磕5: 自定義一個檔案系統的classLoader
【正文】Java類載入器( CLassLoader ) 死磕5: 自定義一個檔案系統classLoader 本小節目錄 5.1. 自定義類載入器的基本流程 5.2. 入門案例:自定義檔案系統類載入器 5.3. 案例的環境配置 5.4 FileClassLoader 案例實現步驟 5
【正文】Java類載入器( CLassLoader ) 死磕 4: 神祕的雙親委託機制
【正文】Java類載入器( CLassLoader ) 死磕4: 神祕的雙親委託機制 本小節目錄 4.1. 每個類載入器都有一個parent父載入器 4.2. 類載入器之間的層次關係 4.3. 類的載入次序 4.4 雙親委託機制原理與沙箱機制 4.5. forName方法和load
Java類載入器( CLassLoader ) 死磕 3: 揭祕 ClassLoader抽象基類
【正文】Java類載入器( CLassLoader ) 死磕 3: 揭祕 ClassLoader抽象基類 (1)一個載入器的parent是誰? (2)為什麼優先從parent載入,而不是從自己的地盤載入?欲知後事如何,請看下回分解。 原始碼: 程式碼工程: class
Java類載入器( CLassLoader ) 死磕 1、2: 匯入 & 分類
JAVA類載入器 死磕系列 目錄 by 瘋狂創客圈 1.匯入1.1. 從class檔案的載入開始1.2. 什麼是類載入器2. JAVA類載入器分類2.1. 作業系統的環境變數2.2. Bootstrap ClassLoader(啟動類載入器)2.3. Extention ClassL
Java原始碼分析——Class類、ClassLoader類解析(三) 類載入器、實現自定義類載入器
在這個系列的第一篇章就講解了Class類的獲取以及載入過程,但是並沒有提及具體的載入過程,在java中,載入一個類是通過ClassLoader類來執行的,也就是類載入器完成。java中所有的類,都必須載入進jvm中才能執行,這個載入的意思是
類載入器ClassLoader之jar包隔離
小引子 最近做了一個根據同一模組的不同jar版本做同時測試的工具,感覺挺有意思,特此記錄。 類載入器(ClassLoader)是啥? 把類載入階段中的“通過一個類的全限定名(博主注:絕對路徑)來獲取描述此類的二進位制位元組流”這個動作放在Java虛擬機器外部去實現,以便讓應用程式自己決定
類載入器ClassLoader
一直想搞清楚類載入器是什麼東西,終於有機會好好研究一下。 類載入器是什麼? 定義:將“通過一個類的全限定名來獲取描述此類的二進位制位元組流”這個動作放到JVM外部去實現,以便讓應用程式自己決定如何去獲取所需要的類。實現這個程式碼模組的類就是
Java類載入器ClassLoader總結
OSGi是 Java 上的動態模組系統。它為開發人員提供了面向服務和基於元件的執行環境,並提供標準的方式用來管理軟體的生命週期。OSGi 已經被實現和部署在很多產品上,在開源社群也得到了廣泛的支援。Eclipse就是基於OSGi 技術來構建的。 OSGi 中的每個模組(bundle)都包含 Java
類載入器[4]由不同ClassLoader物件載入的同名類屬於不同類
由不同ClassLoader物件載入的同名類屬於不同的型別,不能相互轉化和相容。 新建一個工程NotSameClass。將如下程式碼,一份放入NoSameClass工程原始碼目錄下,一份編譯成.class放入D:\temp目錄下 執行如下程式碼,使用不同的類載入器載入同一個類(原始碼都一樣,不過一個來自