2

私は次の例を持っています

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クラスローダーを取得しています。

どうすればこれを行うことができますか?

ありがとう

4

1 に答える 1

0

Thread.setContextClassLoaderに変数を設定するだけですThread。クラスのリンクは、引き続き各クラスのクラスローダーから実行されます。確かに、すでにロードされているクラスのクラスローダーは変更されません。変更されるのは、によって返されるクラスローダーだけThread.getContextClassLoaderです。

スレッドコンテキストクラスローダーやその他のスレッドグローバルから離れることをお勧めします。

于 2012-04-19T09:14:40.833 に答える