首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Groovy全攻略-嵌入篇

2013-08-01 
Groovy全攻略--嵌入篇//?从Java代码中调用Groovy语句Binding?binding??new?Binding()binding.setVariabl

Groovy全攻略--嵌入篇
//?从Java代码中调用Groovy语句
Groovy全攻略-嵌入篇Binding?binding?=?new?Binding();
Groovy全攻略-嵌入篇binding.setVariable("foo",?new?Integer(2));
Groovy全攻略-嵌入篇GroovyShell?shell?=?new?GroovyShell(binding);
Groovy全攻略-嵌入篇
Groovy全攻略-嵌入篇Object?value?=?shell.evaluate("println?'Hello?World!';?x?=?123;?return?foo?*?10");
Groovy全攻略-嵌入篇assert?value.equals(new?Integer(20));
Groovy全攻略-嵌入篇assert?binding.getVariable("x").equals(new?Integer(123));


2.在Java中动态调用运行Groovy代码
你可以使用GroovyClassLoader将Groovy的类动态地载入到Java程序中并直接使用或运行它.
下面是一个例子:

Groovy全攻略-嵌入篇ClassLoader?parent?=?getClass().getClassLoader();
Groovy全攻略-嵌入篇GroovyClassLoader?loader?=?new?GroovyClassLoader(parent);
Groovy全攻略-嵌入篇Class?groovyClass?=?loader.parseClass(new?File("src/test/groovy/script/HelloWorld.groovy"));
Groovy全攻略-嵌入篇
Groovy全攻略-嵌入篇//?调用实例中的某个方法
Groovy全攻略-嵌入篇GroovyObject?groovyObject?=?(GroovyObject)?groovyClass.newInstance();
Groovy全攻略-嵌入篇Object[]?args?=?{};
Groovy全攻略-嵌入篇groovyObject.invokeMethod("run",?args);
Groovy全攻略-嵌入篇

如果你想使用一个用Groovy脚本实现的接口,你可以这么使用它:

Groovy全攻略-嵌入篇GroovyClassLoader?gcl?=?new?GroovyClassLoader();
Groovy全攻略-嵌入篇Class?clazz?=?gcl.parseClass(myStringwithGroovyClassSource?"SomeName.groovy");
Groovy全攻略-嵌入篇Object?aScript?=?clazz.newInstance();
Groovy全攻略-嵌入篇MyInterface?myObject?=?(MyInterface)?aScript;
Groovy全攻略-嵌入篇myObject.interfaceMethod();
Groovy全攻略-嵌入篇??Groovy全攻略-嵌入篇
Groovy全攻略-嵌入篇

如果某个Groovy类实现口MyInterface接口,那么上面的代码就会很好的工作.myObject的使用方法与其他实现了MyInterface接口的Java对象一样.

3.Groovy脚本引擎
对于那些想将Groovy脚本嵌入到服务器并且在每次修改后重新装入的人来说,Groovy脚本引擎提供了一个彻底的解决方案.你可以设定系列CLASSPATH作为根来初始化Groovy脚本引擎,这些GLASSPATH可以是URL也可以是目录名.接着你就可以这些根路径下的任何Groovy脚本了.GSE会跟踪脚本间的依赖关系,因此如果任何有依赖关系的脚本被修改,整颗树将会重新编译和载入.
另外,每次执行脚本时,你都可以传入一个包含脚本可接受属性的Binding.脚本执行完以后,传入脚本中的那些属性在Binding中依然有效.下面是一个例子:
/my/groovy/script/path/hello.groovy:

Groovy全攻略-嵌入篇output?=?"Hello,?${input}!"
Groovy全攻略-嵌入篇Groovy全攻略-嵌入篇?import??groovy.lang.Binding;
Groovy全攻略-嵌入篇?import??groovy.util.GroovyScriptEngine;
Groovy全攻略-嵌入篇
Groovy全攻略-嵌入篇String[]?roots??=???new??String[]??{??"?/my/groovy/script/path?"??}?;
Groovy全攻略-嵌入篇GroovyScriptEngine?gse??=???new??GroovyScriptEngine(roots);
Groovy全攻略-嵌入篇Binding?binding??=???new??Binding();
Groovy全攻略-嵌入篇binding.setVariable(?"?input?"?,??"?world?"?);
Groovy全攻略-嵌入篇gse.run(?"?test.groovy?"?,?binding);
Groovy全攻略-嵌入篇System.out.println(binding.getVariable(?"?output?"?));

将打印 "Hello, world!".

4.运行时依赖
和JDK1.4一样,Groovy Jar也依赖与ASM库上的运行时,ASM库包括4个Jar(asm-2.1.jar, asm-util-2.1.jar, asm-attrs-2.1.jar and asm-analysis-2.1). 也就是说,只要将上面的5个Jar添加到路径中,你就能将轻松地Groovy嵌入到你的应用里.

另一种方案可以不用那么多的Jar.你可以用GROOVY_HOME/embeddable目录下的groovy-all-1.0-beta-x.jar.这个Jar包将Groovy和ASM组合打包成一个方便的Jar包.注意:groovy-all-1.0-beta-x.jar中的ASM类使用了不同的命名空间,因此要避免与使用ASM的库发生冲突.

热点排行