1. 程式人生 > >ClassLoader類載入器探索ing...

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原始碼分析——ClassClassLoader解析(三) 載入、實現自定義載入

    在這個系列的第一篇章就講解了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目錄下 執行如下程式碼,使用不同的類載入器載入同一個類(原始碼都一樣,不過一個來自