【发布时间】:2018-05-16 10:11:20
【问题描述】:
有一种叫做自定义类加载器的东西,我们可以在其中编写和加载相同的类(由 Java 类加载器加载)。
我的问题是,为什么我们必须使用自定义类加载器?什么是实时情况或用例?
【问题讨论】:
标签: java multithreading collections customization classloader
有一种叫做自定义类加载器的东西,我们可以在其中编写和加载相同的类(由 Java 类加载器加载)。
我的问题是,为什么我们必须使用自定义类加载器?什么是实时情况或用例?
【问题讨论】:
标签: java multithreading collections customization classloader
这里有一个简短而甜蜜的答案:自定义类加载器允许您根据应用程序的特定需求控制 Java 类在 JVM 中的加载方式。例如,JBoss 的热部署(其他容器也支持此功能)使用自定义类加载器来交换类,如果您想了解更多信息,请前往 this 或http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html
编辑
根据 OP 的要求,这里有一个带有代码 sn-p 的小示例,仅用于介绍自定义类加载器。
依赖 JVM 的类加载器不能加载同一个 JDBC 驱动程序的两个不同版本。那么如何解决这个问题呢?答案在于制作自定义类加载器并直接从 JAR 档案中加载类。
import java.net.*;
URL url=new URL("jar:file:/c:myJarsmyJar1.jar!/");
URLClassLoader ucl = URLClassLoader(new URL[] { url });
Object myClassObject = Class.forName("MyClass", true, ucl).newInstance();
上面的例子说明了如何使用 URLClassLoader 从它们各自的 jar 文件中加载 java 类,还有其他方法和 API 也可以做到这一点,例如 JARClassLoader 等。
【讨论】: