Java 脚本 API
脚本与动态的对比
术语脚本 通常表示在解释器 shell 中运行的语言,它们往往没有单独的编译步骤。术语动态 通常表示等到运行时判断变量类型或对象行为的语言,往往具有闭包和连续特性。一些通用的编程语言同时具有这两种特性。此处首选脚本语言 是因为本文的着重点是 Java 脚本 API,而不是因为提及的语言缺少动态特性。
2006 年 10 月,Java 语言添加了脚本包,从而提供了一种统一的方式将脚本语言集成到 Java 应用程序中去。对于语言开发人员,他们可以使用这个包编写粘连代码(glue code),从而使人们能够在 Java 应用程序中调用他们的语言。对于 Java 开发人员,脚本包提供了一组类和接口,允许使用一个公共 API 调用多种语言编写的脚本。因此,脚本包类似于不同语言(比如说不同的数据库)中的 Java Database Connectivity (JDBC) 包,可以使用一致的接口集成到 Java 平台中去。
以前,在 Java 代码中,动态调用脚本语言涉及到使用各种语言发行版所提供的独特类或使用 Apache 的 Jakarta Bean Scripting Framework (BSF)。BSF 在一个 API 内部统一了一组脚本语言(请参阅 参考资料)。使用 Java SE 6 脚本 API,二十余种脚本语言(AppleScript、Groovy、JavaScript、Jelly、PHP、Python、Ruby 和 Velocity)都可以集成到 Java 代码中,这在很大程序上依赖的是 BSF。
脚本 API 在 Java 应用程序和外部脚本之间提供了双向可见性。Java 代码不仅可以调用外部脚本,而且还允许那些脚本访问选定的 Java 对象。比如说,外部 Ruby 脚本可以对 Java 对象调用方法,并访问对象的属性,从而使脚本能够将行为添加到运行中的应用程序中(如果在开发时无法预计应用程序的行为)。
调用外部脚本可用于运行时应用程序增强、配置、监控或一些其他的运行时操作,比如说在不停止应用程序的情况下修改业务规则。脚本包可能的作用包括:
·在比 Java 语言更简单的语言中编写业务规则,而不用借助成熟的规则引擎。
·创建插件架构,使用户能够动态地定制应用程序。
·将已有脚本集成到 Java 应用程序中,比如说处理或转换文件文章的脚本。
·使用成熟的编程语言(而不是属性文件)从外部配置应用程序的运行时行为。
·在 Java 应用程序中添加一门特定于域的语言(domain-specific language)。
·在开发 Java 应用程序原型的过程中使用脚本语言。
·在脚本语言中编写应用程序测试代码。
编辑推荐
(责任编辑:zyc)