gpt4 book ai didi

java - 什么是类加载器反转

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:53:54 27 4
gpt4 key购买 nike

任何人都可以解释“核心 Java 第 II 卷第 8 版”第 759 页中的以下段落:

Your application code contains a helper method that calls Class.forName(classNameString).

That method is called from a plugin class.

The classNameString specifies a class that is contained in the plugin JAR.

The author of the plugin has the reasonable expectation that the class should be loaded. However, the helper method's class was loaded by the system class loader, and that is the class loader used by Class.forName. The classes in the plugin JAR are not visible. This phenomenon is called classloader inversion ...

根据我的理解,如果“辅助方法的类是由系统类加载器加载的”,那么它所在的插件jar必须放在CLASSPATH中,而且如果“classNameString指定了一个类包含在plugin JAR”那么这两个类应该都在同一个jar文件中,在CLASSPATH中,那么为什么“插件JAR中的类不可见”

最佳答案

说类Helper.class在core.jar中,它在CLASSPATH上,由系统类加载器加载。

PluginMain.class 和PluginWidget.class 在plugin.jar 中,但是plugin.jar 不在CLASSPATH 中。

作为插件系统的一部分,插件创建一个名为 PluginClassLoader 的新类加载器,使用它从 plugin.jar 加载 PluginMain.class,并调用 PluginMain.start()。

如果 PluginMain.start() 调用 Helper.deluxeLoadClass("PluginWidget.class"),并且 deluxeLoadClass() 最终调用 Class.forName("PluginWidget.class"),则会发生类加载器反转。这失败了,因为 Helper.class 是由系统类加载器加载的,它看不到 PluginWidget.class,因为系统类加载器在其类路径上没有 plugin.jar。

这个例子有点做作,但这些事情在使用 complex class loader hierarchies 的 J2EE 容器中更频繁地发生。 .

关于java - 什么是类加载器反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7975604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com