gpt4 book ai didi

java - JAVA运行时从另一个类加载器获取类的引用

转载 作者:行者123 更新时间:2023-12-02 12:46:26 27 4
gpt4 key购买 nike

我正在应用程序的新线程中运行一些特定于域的脚本。线程中的类加载器仅具有应用程序的所有类。

该应用程序还有一个模块,可以在运行时加载文件夹中 jar 中的附加类(在应用程序外部创建的类),从而为应用程序的其他部分提供附加功能。

不幸的是,这两个类加载器没有合并,当运行我的脚本时,我无法加载我知道外部 jar 之一中存在的任何类。

尝试了 this.getClass().getClassLoader().loadClass("external.cls") 不行。

我也尝试了 Reflections Reflections = new Reflections("external.cls") 但没有成功。

有没有办法在运行时访问我的脚本运行线程中的这些类?像这样的东西:

  • 获得对加载外部类的另一个类加载器的访问权限?
  • 使用反射从两个类加载器获取外部类?
  • 在我的脚本运行线程中再次加载外部 jar 吗?

最佳答案

您在问题中概述的大多数选项都有效。

Use reflection to get the external class from the two class loaders?

不会。类加载是指在类路径中查找类并使其可用。反射(reflection)在那里没有帮助。加载一个类并不重要,因为它是在类文件中直接引用的;或者因为你调用了 Class.forName()。

对于其他两个选项:

Load the external jars again in my script running thread?

可能是“最容易”实现的;当然,这意味着重新加载类;换句话说:重新开始工作。根据我们所讨论的类(class)数量,这可能微不足道,或者成本相当高。

Gain access to another class loader that loaded the external class?

需要您重新设计该“脚本类”加载器。当它找不到类时,它必须将 loadClass() 调用委托(delegate)给那些“其他”类加载器。

最有可能的是,您的第一个选择可以以干净、直接的方式实现 - 但它不是免费的; 必须编写代码才能实现这一点。

关于java - JAVA运行时从另一个类加载器获取类的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755105/

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