簡體   English   中英

覆蓋Java類加載器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM