我通过bean脚本框架使用rhino在我的java进程中创建和配置对象。脚本中使用的某些类需要动态加载,因为它们并不总是在标准类路径上。
要加载这些类,我使用自定义类加载器初始化脚本框架的上下文工厂,该加载器从辅助目录加载这些类。这很有效。
问题是这些类中的一些类在它们的构造函数中使用了其他类,这些类也必须从这个auxilary目录中加载。查看源代码,我看到javascript引擎只是调用Constructor.newInstance。
我如何知道newInstance调用使用哪个类加载器,我可以自己注入,这样我就可以手动加载标准类加载器不知道如何加载的类。
答案 0 :(得分:1)
尝试将类加载器的父类加载器设置为应用程序类加载器。
ClassLoader myLoader = new ClassLoader(getClass().getClassLoader()) {
... your code loading from custom directory ...
}
从您的加载器加载的类将使用您的加载器来查找其他类,因此您的加载器需要提供这些类(通过委托给父级)
答案 1 :(得分:0)
Constructor.newInstance
对Constructor
实例进行操作,该实例属于由特定Class
加载的特定ClassLoader
实例。类通过自己的类加载器进行链接。
Single-arg Class.forName
使用直接调用者的类加载器(它是一个非常淘气的API)。