首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写java类加载器

重写java类加载器
EN

Stack Overflow用户
提问于 2012-04-19 17:04:45
回答 1查看 2.3K关注 0票数 2

下面是我的例子

代码语言:javascript
复制
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();
    }
}

为什么在调用之后

代码语言:javascript
复制
Thread.currentThread().setContextClassLoader(customClassLoader);

一旦我执行了

代码语言:javascript
复制
this.getClass().getClassLoader(); 

我仍然使用java类加载器,而不是我的自定义类加载器。

我怎么能做到这一点?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2012-04-19 17:14:41

Thread.setContextClassLoader只是在Thread中设置一个变量。链接类仍然是通过每个类的类加载器来完成的。它当然不会改变任何已经加载的类的加载器。它所改变的只是Thread.getContextClassLoader返回的类加载器。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10224876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档