实战 Groovy: 在 Java 应用程序中加一些 Groovy 进来
2009-11-19 00:00:00 来源:WEB开发网在清单 9 中,我向实例化的 GroovyScriptEngine 传入了一个数组,数据中包含我要处理的路径,然后创建大家熟悉的 Binding 对象,然后再执行仍然很熟悉的 Songs.groovy 脚本。只是为了好玩,我还执行了BusinessObjects.groovy 脚本,您或许还能回忆起来,它在开始这次讨论的时候出现过。
Bean 脚本框架
最后,当然并不是最不重要的,是来自 Jakarta 的古老的 Bean 脚本框架( Bean Scripting Framework —— BSF)。BSF 试图提供一个公共的 API,用来在普通 Java 应用程序中嵌入各种脚本语言(包括 Groovy)。这个标准的、但是有争议的最小公因子方法,可以让您毫不费力地将 Java 应用程序嵌入 Groovy 脚本。
还记得前面的 BusinessObjects 脚本吗?在清单 10 中,可以看到 BSF 可以多么容易地让我把这个脚本插入普通 Java 程序中:
清单 10. BSF 开始工作了package com.vanward.gembed;
import org.apache.bsf.BSFManager;
import org.codehaus.groovy.runtime.DefaultGroovyMethods;
import java.io.File;
import groovy.lang.Binding;
public class BSFEmbedGroovy{
public static void main(String args[]) throws Exception {
String fileName = "C:\\dev\\project\\src\\groovy\\
com\\vanward\\groovy\\BusinessObjects.groovy";
//this is required for bsf-2.3.0
//the "groovy" and "gy" are extensions
BSFManager.registerScriptingEngine("groovy",
"org.codehaus.groovy.bsf.GroovyEngine", new
String[] { "groovy" });
BSFManager manager = new BSFManager();
//DefaultGroovyMethods.getText just returns a
//string representation of the contents of the file
manager.exec("groovy", fileName, 0, 0,
DefaultGroovyMethods.getText(new File(fileName)));
}
}
结束语
如果在本文中有一件事是清楚的话,那么只件事就是 Groovy 为了 Java 代码内部的重用提供了一堆选择。从把 Groovy 脚本编译成普通 Java .class 文件,到动态地加载和运行脚本,这些问题需要考虑的一些关键方面是灵活性和耦合。把 Groovy 脚本编译成普通 .class 文件是 使用 您打算嵌入的功能的最简单选择,但是动态加载脚本可以使添加或修改脚本的行为变得更容易,同时还不必在编译上牺牲时间。(当然,这个选项只是在接口不变的情况下才有用。)
把脚本语言嵌入普通 Java 不是每天都发生,但是机会确实不断出现。这里提供的示例把一个简单的目录搜索工具嵌入到基于 Java 的应用程序中,这样 Java 应用程序就可以很容易地变成 MP3 播放程序或者其他 MP3 播放工具。虽然我 可以 用 Java 代码重新编写 MP3 文件搜索器,但是我不需要这么做:Groovy 极好地兼容 Java 语言,而且,我很有兴趣去摆弄所有选项!
更多精彩
赞助商链接