gpt4 book ai didi

Java 类加载器

转载 作者:IT老高 更新时间:2023-10-28 21:20:41 25 4
gpt4 key购买 nike

谁能给我一个好的资源或解释一下类加载器背后的概念?我在类加载器上找到了以下资源 http://www.onjava.com/lpt/a/5586但仍然没有帮助。以下问题可能看起来很愚蠢,但试图回答它们总是让我感到困惑。

  • 为什么开发人员要编写自定义类加载器,为什么不调用 Bootstrap 类加载器来调用您的自定义类?自定义类加载器需要什么?

  • 为什么有这么多种类加载器? eg: Bootsrap, Comman, Catalina 类加载器等,

    提前致谢。

最佳答案

我发现以下创建自定义类加载器的正当理由:

  1. 您想从非常规来源加载一个类(例如,一个类的字节码存储在数据库中,通过网络或 carried as 0 and 1s by pidgeons - MessengerPidgeonClassLoader)。对于这种情况,API 中已经有一些 ClassLoader 实现,例如 URLClassLoader .

  2. 您需要定义不同的层次结构来加载类。 ClassLoader 的默认实现首先将搜索委托(delegate)给父级,然后他们尝试自己加载类。也许您想要不同的层次结构。这就是为什么 OSGI 和 Eclipse 有自己的 ClassLoaders 的原因,因为 Manifest .MF 文件定义了所有类型的奇怪的层次结构路径(例如伙伴类加载)。所有 Eclipse 类加载器都实现了 BundleClassLoader 接口(interface),并有一些额外的代码来在 Eclipse 插件中查找资源。

  3. 你需要对字节码做一些修改。也许字节码是加密的,你会即时解密它( Not that it helps, really, but has been tried )。也许您想“修补”动态加载的类(A la JDO 字节码增强)。

如果您需要从内存中卸载类或加载类而不是在运行时更改其定义,则需要使用与系统类加载器不同的类加载器。例如,一个典型的案例是应用程序从 XML 文件动态生成一个类,然后尝试重新加载该类。一旦一个类在系统类加载器中,就没有办法卸载它并有一个新的定义。

关于Java 类加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540150/

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