Ben*_*ann 5 java rhino scriptengine nashorn
ScriptEngineManager.getEngineByName查找并为给定名称创建一个ScriptEngine。
Rhino将自己注册为“ js”,“ rhino”,“ JavaScript”,“ javascript”,“ ECMAScript”和“ ecmascript”
Nashorn将自己注册为“ nashorn”,“ Nashorn”,“ js”,“ JS”,“ JavaScript”,“ javascript”,“ ECMAScript”和“ ecmascript”
如果我使用Nashorn和Rhino均已注册的“ js”之类的名称,将使用哪个脚本引擎?它将在Java 8和Rhino上使用Nashorn吗?
查看JavaDocregisterEngineName:
注册 ScriptEngineFactory 来处理语言名称。覆盖使用发现机制发现的任何此类关联。
还有registerEngineName源代码(请注意,这nameAssociations是一个哈希映射):
public void registerEngineName(String name, ScriptEngineFactory factory) {
if (name == null || factory == null) throw new NullPointerException();
nameAssociations.put(name, factory);
}
Run Code Online (Sandbox Code Playgroud)
因此,对于给定的名称,似乎getEngineByName将返回最后为该名称注册的脚本引擎工厂。
由于脚本引擎工厂是通过该ServiceLoader机制加载的,因此加载顺序将取决于相关类加载器getResources方法枚举服务配置文件的顺序。
对于默认安装,所有这些都无关紧要,因为 Java 8 仅包含 Nashorn,而 Java 7 及更早版本仅包含 Rhino。如果您通过系统类路径添加额外的引擎,它将在引导/扩展类加载器加载的引擎之后加载,因此具有优先权。
| 归档时间: |
|
| 查看次数: |
1180 次 |
| 最近记录: |