关于ClassLoader,如果我们不委托给父类加载器会发生什么?

问题描述 投票:0回答:1

类加载器应该首先将加载过程委托给它的父类加载器。这是一些文档所说的。

那么,如果我们不遵循这个模式会发生什么。那就是:

我们重写了loadClass,在它的实现中,我们直接调用:

defineClass(...)  // get Class objet for a given byte array
resoveClass(...)  // link class to vm
java jvm classloader
1个回答
2
投票

Tomcat 的 Web 应用程序类加载器是一个类加载器的示例,它不会(总是)首先将加载过程委托给其父级(根据 Servlet 规范)。 classloader-howto 文章解释了这一点,并深入了解了该做什么(不该做什么)。如果你想了解它在实际中是如何工作的,可以查看WebappClassLoader的源代码。

在侧节点上,如果当前线程是使用自定义类加载器启动的,则创建 URLClassLoader 而不将

Thread.currentThread().getContextClassLoader()
作为构造函数中的父类加载器传递可能会产生令人惊讶的结果。 URLClassLoader 只知道系统类加载器中的类和提供的 URL 中的类,但不知道自定义类加载器中的类。

© www.soinside.com 2019 - 2024. All rights reserved.