脚本化技术
我喜欢在 vim 或者 emacs 编辑环境中进行文档,代码以及邮件等的编写,她们都提供了良好的命令和快捷键,但是这些都不足以使得她们被誉为 world-class 编辑器,她们的强大的真正来源,正是脚本技术。使用脚本,您可以将您的 vim 或者 emacs 配置得无所不能,甚至有人通过脚本来 让 emacs 煮咖啡。
什么是脚本化
脚本化可以使 宿主 程序具有 脚本 所描述的能力,比如流行在 DHTML 页面中的 JavaScript 技术,JavaScript 可以让原本是静态的 HTML 代码的页面“活”起来,具有动画,局部刷新等更高级的功能。应用程序一般是以二进制的形式发布的,用户很难根据自己的需求对其进行定制,当然,修改配置文件是一种方式,但是不够灵活。而脚本化则是通过用户自己设计脚本(程序代码 ),然后将其 注入 到应用中,使得应用的行为得到改变。
如何脚本化您的应用
通常的做法是,将 宿主 程序的一部分组件暴露给脚本,以方便脚本对其定制,这些组件的作用范围是全局的(可以通过公开接口暴露,也可以将组件实例设置到脚本上下文(context)中),脚本可以在其中添加,修改一些子组件,从而实现定制的目的。本文将通过一个实例来对这个过程以说明,在文章的最后,我们可以得到一个可以运行的小应用出来,如果您对其有不满意之处,可以任意的扩展它。
JDK 6 中,添加了对脚本的支持,并实现了一些常见的脚本语言与 Java 的交互,比如 Python(Jython)、 JavaScript(rhino)等语言,完整的列表请参考 此处。文中使用的脚本语言为 JavaScript,宿主语言为 Java。(JavaScript 在 DHTML 中应用很广泛,同时,也是我最喜欢的一门编程语言)
一个小的 todo 管理器
在文中,我们会先实现一个小型的应用:一个简单的 todo(待办事项)管理器,然后开发一个插件(脚本)框架,最后将使用这个框架对 todo 管理器进行脚本化。
图 1. sTodo 主界面
这是一个简单的 todo 管理器,可以对待办事项(todo item)进行增删改查等操作,并且可以将这些事项通过邮件发送给指定邮箱等。这个项目目前托管在 Google,项目名为 sTodo。
图 2. sTodo 右键菜单
设计和实现
sTodo 是用纯 Java 的 Swing 工具包开发的,其中包含一个嵌入式的数据库 sqlite,整个应用非常简单,我们现在考虑为其增加脚本框架,并为其开发两个脚本,扩展其部分功能。完整的代码可以从 示例代码 中获得。由于 sTodo 为一个开源项目,并且主要由本文开发和维护,所以可以自由的对其进行修改、扩展,使其成为一个真实可用的应用。
在开始之前,读者可以在 sTodo 的项目主页上下载未经过脚本化的初始版本的源代码,然后根据文中的步骤自己逐步给 sTodo 加入插件机制。
[1] [2] [3] [4] 下一页