Groovy被设计得非常轻量级,很容易迁入到任何Java应用系统。
你可以使用BSF将Groovy脚本嵌入任何Java代码中.但是Groovy提供了一个轻量级的紧密集成.下面是3种主要方法:

1.使用Shell调试脚本或表达式
在Groovy中你可以使用GroovyShell对Groovy脚本和表达式进行调试.GroovyShell允许你通过Binding对象传入或传出变量.

//从Java代码中调用Groovy语句Binding binding = new Binding();
binding.setVariable("foo", new Integer(2));
GroovyShell shell = new GroovyShell(binding);

Object value = shell.evaluate("println 'Hello World!'; x = 123; return foo * 10");
assert value.equals(new Integer(20));
assert binding.getVariable("x").equals(new Integer(123));

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

ClassLoader parent = getClass().getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
Class groovyClass = loader.parseClass(new File("src/test/groovy/script/HelloWorld.groovy"));

//调用实例中的某个方法GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
Object[] args = {};
groovyObject.invokeMethod("run", args);

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

GroovyClassLoader gcl = new GroovyClassLoader();
Class clazz = gcl.parseClass(myStringwithGroovyClassSource "SomeName.groovy");
Object aScript = clazz.newInstance();
MyInterface myObject = (MyInterface) aScript;
myObject.interfaceMethod();
  

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

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

output = "Hello, ${input}!"
import  groovy.lang.Binding;
import  groovy.util.GroovyScriptEngine;

String[] roots  =   new  String[]  {  " /my/groovy/script/path "  } ;
GroovyScriptEngine gse  =   new  GroovyScriptEngine(roots);
Binding binding  =   new  Binding();
binding.setVariable( " input " ,  " world " );
gse.run( " test.groovy " , binding);
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的库发生冲突.

Groovy全攻略--嵌入篇相关推荐

  1. Retrofit全攻略——进阶篇

    最近事比较多,距离上次写文章已经过去了一个月了.上一篇文章Retrofit全攻略--基础篇 介绍了Retrofit的基础用法,这篇文章介绍点进阶的用法. 打印网络日志 在开发阶段,为了方便调试,我们需 ...

  2. 国企央企OFFER收割全攻略 | 银行篇之差额体检答疑

    文章目录 国企央企OFFER收割全攻略 | 银行篇之差额体检&答疑 6 体检 6.1 体检是差额体检,是招聘的一个环节 6.2 体检的流程 6.3 体检的注意事项 7 答疑 8 结束语 题外话 ...

  3. 国企央企OFFER收割全攻略 | 银行篇之面试

    文章目录 国企央企OFFER收割全攻略 | 银行篇之面试 5 面试 5.1 银行面试的考察内容与考察形式 5.2 不同银行面试的面试内容 5.3 银行面试流程与常考问题 5.4 如何准备银行面试 5. ...

  4. 国企央企OFFER收割全攻略 | 银行篇之笔试

    文章目录 国企央企OFFER收割全攻略 | 银行篇之笔试 4 笔试 4.1 银行笔试的考察内容与题型 4.2 不同银行笔试的侧重点 4.3 如何准备银行笔试 4.4 笔试的注意事项 小结 国企央企OF ...

  5. asp功放怎么装_汽车音响安装全攻略--功放篇

    汽车音响安装全攻略--功放篇 安装功放比安装接收机或扬声器更需要一些技巧,但并不意味着不可操作.事先了解注意事项,可以减少发生故障的机率. 安 装 第一步:作好准备工作 功放与接收机间必须保持至少90 ...

  6. 国企央企OFFER收割全攻略 | 银行篇之性格测评

    文章目录 国企央企OFFER收割全攻略 | 银行篇之性格测评 3 性格测评 3.1 考察内容 3.2 题型 3.3 注意事项 小结 国企央企OFFER收割全攻略 | 银行篇之性格测评 大家好,这里是小 ...

  7. 国企央企OFFER收割全攻略 | 银行篇之银行投递

    国企央企OFFER收割全攻略 | 银行篇之银行投递 大家好,这里是小黛.最近完成了一些工作上的事情,因此更新推迟了一些. 这篇银行求职全攻略,千呼万唤始出来,耗费了小黛非常非常非常多的心血,反复加工反 ...

  8. 国企央企OFFER收割全攻略 | 银行篇之行业整体介绍

    国企央企OFFER收割全攻略 | 银行篇之行业整体介绍 大家好,这里是小黛.最近完成了一些工作上的事情,因此更新推迟了一些. 这篇银行求职全攻略,千呼万唤始出来,耗费了小黛非常非常非常多的心血,反复加 ...

  9. FPGA开发全攻略——概念篇

    原文链接: FPGA开发全攻略连载之一:FPGA为什么这么热? FPGA开发全攻略连载之二:为什么工程师要掌握FPGA开发知识? FPGA开发全攻略连载之三:FPGA基本知识与发展趋势(part1) ...

最新文章

  1. 一维码Codabar简介及其解码实现(zxing-cpp)
  2. java的多态性学习代码
  3. 10a大电流稳压芯片_一文教你秒懂LDO芯片电路设计的六大因素
  4. 使用RequestFactory API进行Spring GWT集成
  5. 栈结构功能实现的伪码展示【数据结构F】
  6. JavaScript Promise 快速入门
  7. 基于RPM包的LAMP搭建
  8. LabVIEW两种方法实现Excel数据(含汉字)读取
  9. 【Web技术】441- 蚂蚁前端研发最佳实践
  10. Tomcat重启服务器
  11. Clickhouse导数工具waterdrop用法
  12. eChats折线图更新数据不自然,要闪一下,动态数据解决
  13. 如何使用 COMSOL 进行电热分析?
  14. Toast分析——实现自己的Toast
  15. LCD12864点阵型液晶显示器介绍
  16. 「Sqlserver」数据分析师有理由爱Sqlserver之二-像使用Excel一般地使用Sqlserver
  17. Jstorm 基本概念
  18. PostgreSQL 变成充气娃娃,怪谁?
  19. jqprint 分页打印_javascript如何实现打印页面?
  20. Spark 去掉前几行 去掉表头

热门文章

  1. python网络爬虫_一篇文章教会你利用Python网络爬虫获取穷游攻略
  2. cnn文本分类python实现_CNN文本分类
  3. 操作系统之进程管理:2、进程的状态以及状态转化
  4. 计算机网络之应用层:4、电子邮件、SMTP、MIME、POP3
  5. Linux Socket poll
  6. KVM虚拟机获取所有IP(shell)
  7. AntiSpy:一款功能强大的反病毒反Rootkit免费工具套件
  8. 系统提升架构能力之10种mysql主从实践总结
  9. python学习—python中的引用本质
  10. webServlet(/) 和 webServlet(/*) 的区别