我需要在不同的类加载器内部执行一些javascript代码。如果是Java,则每个任务将在单独的类加载器中运行。现在,我需要使用JavaScript。
我需要ScriptEngine
在每个类加载器中创建的新实例,还是可以在类加载器之间共享一个实例?
从您的问题尚不清楚,您为什么要寻找这样的类加载器隔离。因此,我在这里总结nashorn的类加载器-也许,您会找到想要的东西。
Nashorn和类加载器:
(1)和(2)无法自定义。nashorn代码中假设它是特权代码。并且有关于通用脚本类加载器和适配器加载器的假设。
(3)默认是创建nashorn引擎时的线程上下文类加载器。如果线程上下文类加载器为null,则使用Nashorn自己的加载器(扩展加载器)。
因此,如果在通过Thread.setContextClassLoader
API设置了合适的线程上下文加载器之后创建了Nashorn引擎,则可以控制脚本引擎的“应用程序类加载器”。
如果可以使用NashornScriptEngineFactory(特定于nashorn的API
https://docs.oracle.com/javase/8/docs/jdk/api/nashorn/jdk/nashorn/api/scripting/NashornScriptEngineFactory.html)创建脚本引擎,您也可以通过编程方式将任何类加载器作为“应用类加载器”传递。您可能要签出接受ClassLoader参数的NashornScriptEngineFactory方法。
除了“应用程序类加载器”外,您还可以选择在“应用程序类加载器”之前搜索其他附加的类加载器。这由“ -cp”或“ -classpath”
nashorn命令行选项指定。请注意,您可以通过“
nashorn.args”系统属性为脚本引擎指定nashorn命令行选项,也可以使用NashornScriptEngineFactory类的getScriptEngine方法以编程方式传递。另请参阅:https
:
//wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes
希望这可以帮助。
主要内容:1 Java.lang ClassLoader介绍,2 Java.lang ClassLoader声明,3 Java.lang ClassLoader方法,4 Java.lang ClassLoader案例1 Java.lang ClassLoader介绍 java.lang.ClassLoader 类是一个对象,它负责加载类。这个类是一个抽象类。它可用于通过安全管理器,以指示安全域。 2 Java.lang ClassLoader声明 3 Java.lang ClassLoader方
问题内容: 我上一些课: 而我的类加载器实现: 现在,我尝试更改当前线程中的默认类加载器: 并输出: 没有人 为什么?我怎样才能变成某个线程? 问题答案: 正如Marko Topolnik指出的那样,上下文类加载器供框架使用。要自己使用类加载器,您必须先调用,然后使用反射API创建A()的新实例。 您将无法直接在源代码中使用A或其方法,因为调用代码不知道A-它使用不同的类加载器。可以由常规类加载器
如果没有,是否有一种简洁的方法来设置类加载器的上下文(比方说,从特定类/库调用的所有内容都应该使用相同的类加载器)。
问题内容: 我的项目目录结构(在Eclipse中): 在中,我有以下代码: 运行此命令时,将获得以下控制台输出: 为什么? 我放置在错误的位置了吗?我是否使用了ClassLoader API错误?还有吗 提前致谢! 问题答案: 如果在同一包装中使用 您拥有的方式 它在类路径的根目录中查找文件。你可以用 搜索规则在的javadoc和的javadoc中进行了说明。
问题内容: 简单地说,什么是Java ClassLoader?何时使用Java?为什么? 好的,我读了一篇维基文章。ClassLoader加载类。好。因此,如果我包含jar文件并导入,则ClassLoader可以完成这项工作。 我为什么要打扰这个ClassLoader?我从未使用过它,也不知道它的存在。 问题是,为什么ClassLoader类存在?而且,您如何在实践中使用它?(案例存在,我知道。)
问题内容: 我有小问题。我学习Java SE并找到ClassLoader类。我尝试在下面的代码中使用它:我试图使用URLClassLoader在运行时动态加载类。 Java虚拟机看不到我的类,并且出现以下异常: 你知道我能解决这个问题吗? 问题答案: 因此,您尝试动态加载类,然后静态引用它。如果您已经可以静态链接到它,则说明已加载并且无法再次加载。您需要通过反射访问方法。 您通常要做的是让加载的类