很多情况下,Groovy是执行某一类任务的理想工具,如快速原型开发设计(rapid prototyping)或创建可由宏指令(macros)或插件(plug-ins)扩展的模块应用。这些扩展可以用Groovy实现,而不需冗长乏味的开发部署周期便可嵌入到您的应用程序中。相信,Groovy极富表现力,其简洁性和强大特性会给您的程序开发带来很大的好处。
在其他情况下,Groovy或许不是最好的选择。这一点对高性能要求极高的应用尤其适用,因为在灵活性和运行速度之间权衡取舍是不可避免的。
Groovy最大的亮点便是与Java的完美集成。Groovy的灵活性和机动性,让开发者至少可以通过5种方式实现与Java集成,当然各种方式均有其优缺点。下面章节将详细讨论这5种集成方式,并给出各种方式的适用条件。
编译成字节码(Compilingto Bytecode)
最简单直接的集成方法便是把Groovy文件编程成Java字节码(即.class文件),并能够在Java类路径(classpath)获取这些文件。这种方式也有弊端:一方面您必须首先编译所有的Groovy文件,而与此同时,部分Groovy文件中引用了其他的Java类同样也需要先被编译,这时便会出现编译问题。
使用GroovyShell(UsingGroovyShell)
GroovyShell允许在Java类中(甚至Groovy类)求任意Groovy表达式的值。您可使用Binding对象输入参数给表达式,并最终通过GroovyShell返回Groovy表达式的计算结果。清单2.19展示了如何使用GroovyShell。
清单2.19 GroovyShell应用
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
public class GroovyShellExample {
public static void main(String args[]) {
Binding binding = newBinding();
binding.setVariable("x",10);
binding.setVariable("language", "Groovy");
GroovyShell shell = newGroovyShell(binding);
Object value =shell.evaluate
("println\"Welcome to $language\"; y = x * 2; z = x * 3; return x ");
assert value.equals(10);
assertbinding.getVariable("y").equals(20);
assertbinding.getVariable("z").equals(30);<