gpt4 book ai didi

java - 是否可以让 System ClassLoader 在运行时加载指定的 .class 文件?

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:02 26 4
gpt4 key购买 nike

我正在为作业编写一个静态分析工具,它使用 ASM 库分析​​ Java 字节码。我们使用的 ASM 的一部分要求(或者至少,似乎要求)从类加载器加载类。

我们希望该工具能够分析 .class 文件,而无需将它们放在类路径中。我们已经在运行时从指定目录加载 .classes 并使用 InputStream 读取它们。在大多数情况下,这对于 ASM 是可以接受的。有一些类,例如 SimpleVerifier,会尝试加载这些类。

在这种情况下,是否可以注册要加载的 .class 文件,以便调用 Class.forName() 来加载它们?或者是否有一种简单的方法来扩展 ClassLoader 以允许这样做?


编辑:关于URLClassLoader 的信息很有用。不幸的是,在这种情况下,对一个实例使用 Thread.currentThread().setContextClassLoader() 是行不通的。我调用的库代码使用了一个加载器,它使用 getClass().getClassLoader() 在实例初始化时检索。

当我设置 URLClassLoader 时,该类尚未初始化,所以我猜 contextClassLoader 不会加载该类。

我是否正确理解了回答?是否可以使用 URLClassLoader 加载第 3 方类?

最佳答案

差不多。

如果你在某处编译了类,你可以用 URLClassLoader 加载它们.然后,您可以将此 ClassLoader 设置为当前线程的 ClassLoader:Thread.setContextClassLoader(ClassLoader)

用户可以获得当前线程上下文类加载器并使用它来访问类定义。

关于java - 是否可以让 System ClassLoader 在运行时加载指定的 .class 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1873916/

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