【问题标题】:Use case of Java custom class loader [duplicate]Java自定义类加载器的用例[重复]
【发布时间】:2018-05-16 10:11:20
【问题描述】:

有一种叫做自定义类加载器的东西,我们可以在其中编写和加载相同的类(由 Java 类加载器加载)。

我的问题是,为什么我们必须使用自定义类加载器?什么是实时情况或用例?

【问题讨论】:

    标签: java multithreading collections customization classloader


    【解决方案1】:

    这里有一个简短而甜蜜的答案:自定义类加载器允许您根据应用程序的特定需求控制 Java 类在 JVM 中的加载方式。例如,JBoss 的热部署(其他容器也支持此功能)使用自定义类加载器来交换类,如果您想了解更多信息,请前往 thishttp://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 等。

    【讨论】:

    • 假设如果有两个类加载器,并且两个类加载器都加载了同一个类。如何区分不同加载器加载的不同类。请附上示例程序
    • 嗨@VaithilingamK,很抱歉发布答案有点晚,希望你能从我的例子中得到想法。如果这解决了您的查询,那么请将答案标记为解决方案。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    相关资源
    最近更新 更多