gpt4 book ai didi

java - 覆盖java类加载器

转载 作者:行者123 更新时间:2023-11-29 09:14:43 26 4
gpt4 key购买 nike

我有下面的例子

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 返回的类加载器。

我建议远离线程上下文类加载器和其他线程全局变量。

关于java - 覆盖java类加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10224876/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com