当客户在Java中说“Code不应该有自定义类加载器”时,这究竟意味着什么?我不能做什么?
答案 0 :(得分:12)
类加载器是Java中的一个对象,负责查找Java类的二进制表示并将它们加载到JVM中。所有JVM都以一个启动类加载器开头,负责加载用户的初始类,以及一些内置类型,如Class
和SecurityManager
,但是用户可以提供自己的类加载器来查找来自其他来源。例如,自定义类加载器可以通过编写自己的字节码来生成自己的类,也可以从联网源中查找类。
为了符合客户的要求,您不应该定义自己的类加载器,而应该依赖引导类加载器来查找所有类。这几乎普遍是在简单的Java程序中完成的,因为自定义引导加载程序的用例通常相当复杂和细微差别。除非您特别想要更改JVM查找和加载类的方式,否则您不必担心此限制。
答案 1 :(得分:1)
自定义类加载器通常用于动态生成代码或增强现有类。
例如,一些ORM实现(JDO)使用它来创建处理将Java对象转换为数据库表的代码。其他用途是透明集群解决方案(如Terracota),其中对象得到增强,以便它们自动在集群中自我复制。
这基本上阻止您动态生成代码并将其注入现有应用程序。
答案 2 :(得分:0)
类加载器是一个负责加载类的对象。每当使用new
实例化一个类时,运行时系统都会尝试使用ClassLoader抽象类的一个或多个实例加载该类。您可以定义自定义类加载器以从网络,数据库,其他进程或任何可想到的数据源加载类。
因此,如果您的客户端不希望您使用自定义类加载器,那么请务必不要编写扩展ClassLoader或其任何派生类的类。有关更多详细信息,请参阅ClassLoader java API文档。
答案 3 :(得分:0)
自定义类加载器可以让您从非常规来源(从您可以想象的任何地方,包括无处不在,即即时创建)加载类。由于您的客户端正在说该消息,因此只能从标准源(例如文件系统,jar文件等)加载类。