1

我通过 bean 脚本框架使用 rhino 在我的 java 进程中创建和配置对象。脚本中使用的一些类需要动态加载,因为它们并不总是在标准类路径上。

为了加载这些类,我使用自定义类加载器初始化脚本框架的上下文工厂,该类加载器从辅助目录加载这些类。这很好用。

问题是这些类中的一些在它们的构造函数中使用了其他类,这些类也必须从这个辅助目录中加载。查看源代码,我发现 javascript 引擎只是调用 Constructor.newInstance。

我怎么知道 newInstance 调用使用哪个类加载器,我可以注入我自己的类加载器,以便我可以手动加载标准类加载器不知道如何加载的类。

4

2 回答 2

1

尝试将类加载器的父类加载器设置为应用程序类加载器。

ClassLoader myLoader = new ClassLoader(getClass().getClassLoader()) { 
... your code loading from custom directory ...
}

从您的加载器加载的类将使用您的加载器来查找其他类,因此您的加载器需要提供这些(通过委托给父类)

于 2009-10-30T18:19:53.557 回答
0

Constructor.newInstanceConstructor实例进行操作,该实例属于由特定 .Class加载的特定实例ClassLoader。类通过它们自己的类加载器链接。

单参数Class.forName使用直接调用者的类加载器(这是一个非常顽皮的 API)。

于 2009-10-30T18:25:22.233 回答