[英]override java class loader
我有以下示例
public class Tester
{
/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException
{
new Tester().execute();
}
private void execute() throws ClassNotFoundException
{
//Java Class Loader
ClassLoader baseClassLoader = Thread.currentThread().getContextClassLoader();
//Java custom Class Loader
ClassLoader customClassLoader = new CustomClassLoader();
Class<?> customClass = Class.forName("a.b.c.d.class", true, customClassLoader);
//Java custom Class Loader
ClassLoader customClassLoader = customClass.getClassLoader();
Thread.currentThread().setContextClassLoader(customClassLoader);
//Java custom Class Loader
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
//Java Class Loader?????
ClassLoader classLoader = this.getClass().getClassLoader();
}
}
為什么調用后
Thread.currentThread().setContextClassLoader(customClassLoader);
一旦我執行
this.getClass().getClassLoader();
我仍然得到Java類加載器,而不是自定義類加載器。
我該怎么做?
謝謝
Thread.setContextClassLoader
只是在Thread
設置一個變量。 仍通過每個類的類加載器完成類的鏈接。 當然,它不會更改任何已加載類的類加載器。 它所更改的只是Thread.getContextClassLoader
返回的類加載器。
我建議遠離線程上下文類加載器和其他線程全局變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.