当前位置: 首页 > 面试题库 >

在运行时加载Java字节码

卢作人
2023-03-14
问题内容

我得到了一些在程序中生成的Java字节码(即已编译的Java源代码)。现在,我想将此字节代码加载到当前运行的Java-
VM中并运行特定功能。我不确定如何做到这一点,我对Java类加载器进行了一些研究,但没有找到直接的方法。

我找到了一个在硬盘上接收类文件的解决方案,但是我得到的字节码在字节数组中,我不想将其写入磁盘,而是直接使用它。

谢谢!


问题答案:

您需要编写一个自定义的类加载器,该类加载器将findClass方法重载

public Class findClass(String name) {
    byte[] b = ... // get the bytes from wherever they are generated
    return defineClass(name, b, 0, b.length);
}


 类似资料:
  • 问题内容: 我试图在运行时将jar文件添加到classpath。我用这个代码 系统输出打印此URL: 我正在仔细检查此路径,此jar存在。即使这个测试也显示com.mysql.jdbc。驱动程序类存在。 但是,当我使用此Class.forName(driver)时,仍然会收到java.lang.ClassNotFoundException。此代码有什么问题? 问题答案: URL可以,但是您仍然尝试

  • 如果一个Java类在运行时作为字节码加载(例如通过ASM库或其他机制),它是否在Java的类路径上?我看不出来。 如果不在Java类路径上,如何扫描以这种方式加载的类的所有注释? 我使用google reflections和第三方库的自定义类加载器。 扫描类的工作方式如下: MyAnnotation-标记为@retention(RetentionPolicy.Runtime)。上面的内容(在类中)

  • 问题内容: 我正在用Java为具有特定脚本功能的领域特定语言编写解释器。我已经实现了解析器,现在需要做一个后端。为此,我正在考虑编写自己的解释器(使用抽象语法树或某些自定义字节码)或目标JVM(在运行时发出并执行Java字节码)。 对此领域有更多经验的人可以说针对JVM的方法可行吗?您建议使用哪些库来发出Java字节码? 问题答案: 这是使用ObjectWeb ASM(我推荐的一个库)构成的一个有

  • 问题内容: 我被要求构建一个Java系统,该系统在运行时能够加载新代码(扩展)。我的代码运行时如何重新加载jar文件?或如何加载新的jar? 显然,由于持续的正常运行时间很重要,因此,我想增加在此过程中重新加载现有类的功能(如果这样做不会使事情复杂化)。 我应该注意什么?(将其视为两个不同的问题-一个关于在运行时重新加载类,另一个关于添加新类)。 问题答案: 用现有数据重新加载现有类可能会破坏事情

  • 问题内容: 为什么用Java这么难?如果要使用任何类型的模块系统,则需要能够动态加载JAR文件。有人告诉我,有一种方法可以通过编写自己的方法来完成,但这对于(至少在我看来)应该像调用以JAR文件作为其参数的方法一样容易的事情来说是很多工作。 对执行此操作的简单代码有何建议? 问题答案: 很难的原因是安全性。类加载器是不可变的。你不应在运行时随意向其添加类。实际上,我很惊讶能与系统类加载器一起使用。

  • 问题内容: 为什么用Java这么难?如果要使用任何类型的模块系统,则需要能够动态加载JAR文件。有人告诉我,有一种方法可以通过编写自己的方法来完成,但这对于(至少在我看来)应该像调用以JAR文件作为其参数的方法那样容易的事情来说是很多工作。 问题答案: 很难的原因是安全性。类加载器是不可变的。您不应在运行时随意向其添加类。实际上,我很惊讶能与系统类加载器一起使用。这是制作自己的子类加载器的方法: