編寫自己的ClassLoader時設定Thread的contextClassLoader
中說到啟動JVM時可以通過設定java.system.class.loader來指定自己編寫的classloader.
當設定java.system.class.loader時:
通過Thread.currentThread().getContextClassLoader()獲取的ClassLoader將是使用者指定的;
這個在編寫自己的ClassLoader時很重要,因為有些開源專案的程式碼會通過Thread.currentThread().getContextClassLoader()來獲取ClassLoader.
如spring就是這樣:
org.springframework.util.ClassUtils中:
public static ClassLoader getDefaultClassLoader() {
ClassLoader cl = null;
try {
cl = Thread.currentThread().getContextClassLoader();
}
catch (Throwable ex) {
logger.debug("Cannot access thread context ClassLoader - falling back to system class loader", ex);
}
if (cl == null) {
// No thread context class loader -> use class loader of this class.
cl = ClassUtils.class.getClassLoader();
}
return cl;
}
ClassLoader cl = null;
try {
cl = Thread.currentThread().getContextClassLoader();
}
catch (Throwable ex) {
logger.debug("Cannot access thread context ClassLoader - falling back to system class loader", ex);
}
if (cl == null) {
// No thread context class loader -> use class loader of this class.
cl = ClassUtils.class.getClassLoader();
}
return cl;
}
如Tomcat啟動時沒有通過設定java.system.class.loader來指定自己的ClassLoader的,但它設定了Thread的contextClassLoader為
“WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@31d91824”
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@31d91824”
()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/195110/viewspace-758288/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 編寫自己的 TypeScript CLITypeScript
- 編寫自己的Webpack LoaderWeb
- Java編寫定時任務Java
- 寫給自己看的Linux運維基礎(二) - Apache/MySQL. 安全設定. 定時任務Linux運維ApacheMySql
- 編寫你自己的Python模組Python
- 編寫自己的Babel外掛(一)Babel
- iOS 設定的textFiled的時候不能編輯iOS
- php匯入時設定不同的編碼PHP
- 自己編寫的(測試點總結)
- spring-boot - 編寫自己的starterSpringboot
- Swift編寫自己的API客戶端SwiftAPI客戶端
- 用Python編寫自己的微型RedisPythonRedis
- 編輯器設定字型時找不到自己安裝的字型(Emeditor為例)解決方法
- 開始編寫自己的技術部落格...
- 為什麼我要編寫自己的UIKitUI
- 使用QT編寫Opencv2/3的LIB設定QTOpenCV
- golang編寫一個window定時關機Golang
- 編寫自己的Acunetix WVS漏洞指令碼指令碼
- 看完你也想編寫自己的 react 外掛React
- DBA日常維護SQL指令碼_自己編寫的SQL指令碼
- PHP入門教程之編寫自己的PHP框架PHP框架
- 從零開始編寫自己的JavaScript框架(一)JavaScript框架
- 從零開始編寫自己的JavaScript框架(二)JavaScript框架
- 編寫自己的php擴充套件函式 (轉)PHP套件函式
- MFC自己的滑鼠Icon設定
- 15_編寫第一個自己的Linux的命令Linux
- pdo連線的時候設定字元編碼是這樣的字元
- 教你在 C 語言上編寫自己的協程
- 構建自己的React UI元件庫(三):文件編寫ReactUI元件
- 編寫自己的php擴充套件函式(一) (轉)PHP套件函式
- 自己寫的面試題,自己想的答案面試題
- 寫給程式設計師:當自己的上帝程式設計師
- session超時時間的設定Session
- 開機時的設定
- 手把手編寫自己的 PHP MVC 框架例項教程PHPMVC框架
- 自己編寫Java Web框架:Takes框架的Web App架構JavaWeb框架APP架構
- typora編寫md檔案文字設定顏色
- 編寫自己的程式碼庫:CSS3 常用動畫的實現CSSS3動畫