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

时间:2014-05-08 14:53:06

标签: java jvm classloader

ClassLoader应首先将加载过程委托给它的父级。这是一些文档说的。

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

我们覆盖loadClass,在它的实现中,我们直接调用:

defineClass(...)  // get Class objet for a given byte array
resoveClass(...)  // link class to vm

1 个答案:

答案 0 :(得分:1)

Tomcat的Web应用程序类加载器是一个类加载器的示例,它不会(始终)将加载过程首先委托给其父进程(根据Servlet规范)。 classloader-howto文章解释了这一点,并提供了(不)要做的事情的见解。如果您想知道它在实践中的工作原理,您可以查看WebappClassLoader的源代码。

在侧节点上,如果当前线程是使用自定义类加载器启动的,那么在构造函数中创建URLClassLoader而不传递Thread.currentThread().getContextClassLoader()作为父类加载器可能会产生令人惊讶的结果。 URLClassLoader只知道System Classloader中的类和提供的URL中的类,而不知道自定义类加载器中的类。