Constructor.newInstance中的自定义类加载器

时间:2009-10-30 18:13:06

标签: java classloader rhino

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

Single-arg Class.forName使用直接调用者的类加载器(它是一个非常淘气的API)。