`

groovy嵌入java

    博客分类:
  • java
 
阅读更多

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);

下面是一个直接通过脚本串执行的例子

/**
	 * 通过脚本串调用脚本
	 */
	public static void runScriptFromStr(String str) {
		try {
			ClassLoader parent = Jutil.class.getClassLoader();
			GroovyClassLoader loader = new GroovyClassLoader(parent);
			Class groovyClass = loader.parseClass(str);
			// 调用实例中的某个方法
			GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
			//设置方法参数
			Object[] args = { "name1" };
			Object result = groovyObject.invokeMethod("getUms", args);
			System.out.println(result);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

  

如果你想使用一个用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的库发生冲突.

分享到:
评论

相关推荐

    java 动态脚本语言 精通 Groovy

    9. **Scripting in Java Applications**:Groovy可以嵌入到Java应用中作为脚本语言使用,例如在服务器端处理HTTP请求,或者作为配置文件来动态改变应用行为。 10. **持续集成与构建工具**:Groovy也是构建工具如...

    java在嵌入运行groovy代码1

    Java 嵌入运行 Groovy 代码是一种常见的技术实践,特别是在需要动态脚本执行或灵活扩展功能的场景中。Groovy 是一种与 Java 兼容的动态编程语言,它的语法简洁,适合编写脚本和快速原型开发。在 Java 应用程序中运行...

    java嵌入groovy所需jar 2.3.7最新版

    java嵌入groovy所需jar 2.3.7最新版

    groovy-all-1.8.1.jar.zip

    5. GString:Groovy的GString允许在字符串中嵌入表达式,例如`"Name is ${name}"`,使得字符串处理更为方便。 6. 枚举和注解的简化:Groovy的枚举和注解创建也比Java更加直观和简洁。 7. 类型推断:Groovy编译器...

    Groovy 学习资料

    - **GString**:GString是Groovy中的动态字符串,支持表达式嵌入,类似于Java的`String.format()`。 - **集合操作**:Groovy提供了丰富的集合操作,如`each`、`collect`、`find`等,使得处理集合更加简便。 5. **...

    groovy经典_资料

    4. **在项目中的应用**:Groovy可以作为中小型项目的替代语言,也可以嵌入到大型Java项目中,增加代码的灵活性。 **Groovy的特性:** 1. **可选的动态类型**:Groovy支持动态类型,这意味着变量的类型可以在运行时...

    groovy基础语法.pdf

    Groovy支持字符串插值功能,可以在字符串中直接嵌入变量和表达式,这使得构建动态字符串更为方便。 正则表达式: Groovy内置了对正则表达式的支持,提供了大量的方法来匹配、查找和替换字符串中的模式。 异常处理...

    Introduction to Groovy

    这意味着开发者可以在Groovy程序中使用任何Java库,也可以将Groovy嵌入到桌面Java应用程序或J2EE应用程序中。此外,Groovy程序还可以使用JUnit进行测试,使用Eclipse、JSwat或IntelliJ等IDE进行调试,并且可以使用...

    groovy入门经典,groovyeclipse 插件

    Groovy还引入了GString,这是一种可变字符串,允许在字符串中嵌入表达式,如`${expression}`。此外,Groovy的运算符重载和元编程能力使代码更加简洁和动态。 在安装GroovyEclipse插件后,开发者可以通过Eclipse的...

    java应用简单嵌入脚本模块

    压缩包中的`Groovy_Script`很可能包含了几个Groovy脚本文件,这些文件可能包含了示例代码,展示了如何在Java应用中嵌入Groovy脚本。文件名可能如`ScriptExample.groovy`,其中包含了具体的脚本代码,如定义函数、...

    groovy文档

    其中,GString是Groovy特有的,允许在字符串中嵌入变量和表达式,极大地简化了字符串操作。此外,Groovy还内置了强大的正则表达式引擎,支持正则表达式的创建、匹配和替换,使得文本处理任务变得简单高效。 ### ...

    请放弃 Jruby和Jython 而选择 Groovy

    同时,Groovy代码可以直接嵌入Java项目,无需额外的编译步骤。 2. **性能**:虽然Jruby和Jython也有良好的性能,但由于它们是解释执行的,可能在某些情况下性能不如Groovy。Groovy的静态类型特性(通过`@Compile...

    IBM 实战 Groovy

    4. **可嵌入Java应用**: Groovy脚本可以直接嵌入到Java应用程序中,为Java应用增添更多的功能。 5. **Shell解析器**: Groovy还提供了Shell解析器,使得Groovy脚本可以作为Shell脚本来运行。 #### 四、Groovy的应用...

    groovy初学者的福音

    5. **GString与字符串操作**:Groovy的GString是一种可以包含表达式的字符串,它允许你在字符串中嵌入变量值。Groovy还提供了丰富的字符串操作方法,比如`tokenize`, `trim`, `split`等。 6. **集合操作**:Groovy...

    Groovy in Action[文字版][中文]

    4. **GString与字符串模板**:Groovy的GString能够方便地进行字符串插值,它允许在字符串中嵌入表达式,使得输出动态内容变得更简单。 5. **Groovy Shell与 Grape**:Groovy Shell提供了一个交互式的环境来执行...

    groovy 1.8.6

    2. **代码块(GString)**:Groovy的字符串插值非常直观,可以嵌入表达式,使得字符串生成更加方便。 3. **元编程**:Groovy支持元编程,允许在运行时修改和扩展类的行为。这对于创建框架和库特别有用,可以实现...

    groovy-embedding:使用具有可重装功能的GroovyScriptEngine进行Groovy嵌入的示例测试

    这是一个示例,探讨了将groovy与Java代码集成的方法,以期通过使用groovy功能并动态加载更改来实现快速原型制作。 这个想法是要运行该应用程序,并以Groovy的方式进行原型设计,使该应用程序运行,并可以选择将运行...

    groovy-all.jar-生成JasperReport所要包含的包

    描述中提到的`groovy-1.7.2\embeddable`目录,表明这是Groovy 1.7.2版本的一个可嵌入版本。这个版本可能是专门为在其他应用中作为组件使用的,比如Web应用服务器、桌面应用或者独立的Java应用程序。`embeddable`目录...

Global site tag (gtag.js) - Google Analytics