[英]How to get a list of all classes that are loaded by the bootstrap class loader?
[英]Is it possible for class loader to get classes already loaded by different class loader?
我有 class Foo
需要 class Bar
作为进口。 Class Bar
加载了与Foo
不同的 class 加载器,并且在定义Foo
时, class 加载器找不到Bar
并抛出ClassNotFoundException
。 如果 class 在当前的 class 加载程序中不可用,是否可以告诉 class 加载程序尝试寻找另一个?
一般不会,不会。 可以编写这样的类加载器,但您不能“编辑”现有的类加载器来像这样工作。
ClassLoaders are asked by either code itself ( SomeClass.class.getResource
will end up there, as will, of course, invoking findResource
or loadClass
or whatnot on an actual ClassLoader
instance), or by the JVM (when a given class needs another to execute , 类的类加载器被要求加载它。这通常会导致 CL 从缓存中返回它,但如果它还没有被那个 CL 加载,那将导致它被加载)。
然后 CL 可以自由地以它认为合适的任何方式实现此请求。 URLClassLoader,它也是默认的类加载器(用类路径初始化)将首先询问它的父加载器(在默认的 JVM 配置中,这将是系统加载器,它知道例如java.lang.String
的位置,来自 jmod 文件您的 JDK 安装),并在可用时返回该结果。 然后它将通过扫描类路径加载,并在那里结束。 您不能要求现有的 URLClassLoader 更改其行为,但您当然可以编写自己的类加载器 - 它只是代码,您可以扩展findClass
等方法。
也许详细说明您要完成的工作。 为什么涉及多个类加载器,你想通过拥有多个类加载器来完成什么? (比如说:从数据库 BLOB 字段中加载类,或者,将模块分开,或者,允许动态重新加载 web 处理程序 - 那种答案)。 您是否正在使用现有的基于 CL 的框架,例如 OSGi?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.