繁体   English   中英

Java中的类加载器究竟是什么?

[英]What exactly are class loaders in Java?

当客户在Java中说“Code不应该有自定义类加载器”时,这究竟意味着什么? 我不能做什么?

类加载器是Java中的一个对象,负责查找Java类的二进制表示并将它们加载到JVM中。 所有JVM都以引导类加载器开始,负责加载用户的初始类,以及一些内置类型,如ClassSecurityManager ,但用户可以提供自己的类加载器来查找其他来源的类。 例如,自定义类加载器可以通过编写自己的字节码来生成自己的类,也可以从联网源中查找类。

为了符合客户的要求,您不应该定义自己的类加载器,而应该依赖引导类加载器来查找所有类。 这几乎普遍是在简单的Java程序中完成的,因为自定义引导加载程序的用例通常相当复杂和细微差别。 除非您特别想要更改JVM查找和加载类的方式,否则您不必担心此限制。

自定义类加载器通常用于动态生成代码或增强现有类。

例如,一些ORM实现(JDO)使用它来创建处理将Java对象转换为数据库表的代码。 其他用途是在透明群集解决方案(如Terracota)中,其中对象被增强,以便它们自动在群集中自我复制。

这基本上阻止您动态生成代码并将其注入现有应用程序。

类加载器是负责加载类的对象。 每当使用new实例化一个类时,运行时系统都会尝试使用ClassLoader抽象类的一个或多个实例加载该类。 您可以定义自定义类加载器以从网络,数据库,其他进程或任何可能的数据源加载类。

因此,如果您的客户端不希望您使用自定义类加载器,那么请务必不要编写扩展ClassLoader或其任何派生类的类。 有关更多详细信息,请参阅ClassLoader java API文档。

自定义类加载器允许您从非常规源(从您可以想象的任何地方加载类,包括无处不在,即即时创建)加载类。 由于您的客户端正在说该消息,因此只能从标准源(例如文件系统,jar文件等)加载类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM