快速业务通道

Java SE 6新特性: 对脚本语言的支持 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
数的默认实现,它们分别通过调用 eval(Reader,ScriptContext) 或 eval(String, ScriptContext) 来实现。这样脚本引擎提供者,只需继承这个抽象类并提供这两个函数实现即可。AbstractScriptEngine 有一个保护域 context 用于保存默认上下文的引用,SimpleScriptContext 类被作为 AbstractScriptEngine 的默认上下文。关于上下文环境,将在后面进行详细介绍。

Java SE 6新特性: 对脚本语言的支持(3)

时间:2011-02-15 IBM 邱小侠

发现和创建脚本引擎

在前面的两个例子中,ScriptEngine 实例都是通过调用 ScriptEngineManager 实例的方法返回的,而不是常见的直接通过 new 操作新建一个实例。JSR 223 中引入 ScriptEngineManager 类的意义就在于,将 ScriptEngine 的寻找和创建任务委托给 ScriptEngineManager 实例处理,达到对 API 使用者隐藏这个过程的目的,使 Java 应用程序在无需重新编译的情况下,支持脚本引擎的动态替换。通过 ScriptEngineManager 类和 ScriptEngineFactory 接口即可完成脚本引擎的发现和创建:

ScriptEngineManager 类:自动寻找 ScriptEngineFactory 接口的实现类

ScriptEngineFactory 接口:创建合适的脚本引擎实例

ScriptEngineManager 类本身并不知道如何创建一个具体的脚本引擎实例,它会依照 Jar 规约中定义的服务发现机制,查找并创建一个合适的 ScriptEngineFactory 实例,并通过这个工厂类来创建返回实际的脚本引擎。首先,ScriptEngineManager 实例会在当前 classpath 中搜索所有可见的 Jar 包;然后,它会查看每个 Jar 包中的 META -INF/services/ 目录下的是否包含 javax.script.ScriptEngineFactory 文件,脚本引擎的开发者会提供在 Jar 包中包含一个 ScriptEngineFactory 接口的实现类,这个文件内容即是这个实现类的完整名字;ScriptEngineManager 会根据这个类名,创建一个 ScriptEngineFactory 接口的实例;最后,通过这个工厂类来实例化需要的脚本引擎,返回给用户。举例来说,第三方的引擎提供者可能升级更新了新版的脚本引擎实现,通过 ScriptEngineManager 来管理脚本引擎,无需修改一行 Java 代码就能替换更新脚本引擎。用户只需在 classpath 中加入新的脚本引擎实现(Jar 包的形式),ScriptEngineManager 就能通过 Service Provider 机制来自动查找到新版本实现,创建并返回对应的脚本引擎实例供调用。图 2 所示时序图描述了其中的步骤:

图 2. 脚本引擎发现机制时序图

Java SE 6新特性: 对脚本语言的支持 - 编程入门网

ScriptEngineFactory 接口的实现类被用来描述和实例化 ScriptEngine 接口,每一个实现 ScriptEngine 接口的类会有一个对应的工厂类来描述其元数据(meta data),ScriptEngineFactory 接口定义了许多函数供 ScriptEngineManager 查询这些元数据,ScriptEngineManager 会根据这些元数据查找需要的脚本引擎,表 2 列出了可供使用的函数:

表 2. ScriptEngineFactory 提供的查询函数

函数 描述
String getEngineName() 返回脚本引擎的全称
String getEngineVersion() 返回脚本引擎的版本信息
String getLanguageName() 返回脚本引擎所支持的脚本语言的名称
String getLanguageVersion() 返回脚本引擎所支持的脚本语言的版本信息
List<String> getExtensions() 返回一个脚本文件扩展名组成的 List,当前脚本引擎支持解析这些扩展名对应的脚本文件
List<String> getMimeTypes() 返回一个与当前引擎关联的所有 mimetype 组成的 List
List<String> getNames() 返回一个当前引擎所有名称的 List,ScriptEngineManager 可以根据这些名字确定对应的脚本引擎

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号