如何在不使用类加载器的情况下动态加载Java类?

ras*_*orp 5 java classloader jrebel

我最近看到了JRebel的在线演示,其中他们解释了他们的产品做了什么,在其中一张幻灯片中他们提到他们没有使用类加载器(见下面的截图).

我有一些项目,我使用类加载器在运行时动态加载类,例如依赖注入(如我开发的Maker Factory框架).我认为在Java中加载类的唯一方法是使用类加载器.

在此输入图像描述

Dav*_*ton 6

他们不使用任何新的类加载器; 他们扩展了默认的.

http://zeroturnaround.com/software/jrebel/learn/faq/#how_does_jrebel_work


Ant*_*pov 3

免责声明:我参与了 JRebel 开发

从技术上讲,可以使用一些不安全的魔法来绕过类加载器,并且 JVM 在创建运行时匿名类(在 Java 8 中)时利用 lambda 来利用它。

然而,JRebel 实际上与现有的类加载器集成,并且不会创建新的类加载器 - 这就是幻灯片的含义。当 JRebel 必须重新加载类时,它不会删除现有的类加载器。相反,它会在现有类加载器中加载类并对其进行版本控制。