Java SE 6新特性: 对脚本语言的支持 - 编程入门网
数的默认实现,它们分别通过调用 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. 脚本引擎发现机制时序图 ScriptEngineFactory 接口的实现类被用来描述和实例化 ScriptEngine 接口,每一个实现 ScriptEngine 接口的类会有一个对应的工厂类来描述其元数据(meta data),ScriptEngineFactory 接口定义了许多函数供 ScriptEngineManager 查询这些元数据,ScriptEngineManager 会根据这些元数据查找需要的脚本引擎,表 2 列出了可供使用的函数: 表 2. ScriptEngineFactory 提供的查询函数
|
||||||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |