Groovy咱使用不再什么大项目上,可以用来实现规则引擎,定义一个groovy文件通过spring动态载入,在groovy里面调用java的方法,处理业务对象。我感觉这个比规则引擎更灵活~~ 1.与Spring集成 Spring 2.0的Script Language集成,是让动态语言编写的类,可以良好的融入java/spring的大框架内,洗白成application context中的普通一员,拥有与其他pojo良好的交互与注入能力。 很简单,SpringSide 里的\springside-bookstore\src\...\plugins\webservice\applicationContext-webservice-client.xml文件已说明了一切用法。 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd"> <!--Groovy版本的Web Service Client--> <lang:groovy id="BookServiceClient" refresh-check-delay="60000" script-source="classpath:org/springside/bookstore/plugins/webservice/service/BookServiceClient.groovy"> <lang:property name="serviceUrl" value="http://localhost:8080/springside/service/BookService"/> </lang:groovy> </beans> 注意spring 2.0为语言集成提供了<lang:language>的简写法,详细见Spring的参考文档第24章 第一个属性 refresh-check-delay,每隔一段时间扫描一次脚本的变化,reload it。 第二个属性script-source 指向scriptsouce, <lang:property>演绎了Spring最喜爱的IOC,将serviceUr变量注入。 当然,世上没有奇迹,Spring 与Groovy、JRuby 是靠一个Interface来定义连接点的。Spring使用BookServiceClient Bean 时,实际使用的是BookService接口。 Groovy因为是Java近亲,所以可以在类里面直接implements BookService接口,而JRuby则必须把interface作为构造参数传给RubyScriptFactory。这样有个不爽的地方,在Groovy里必须显式定义接口的所有函数和参数、返回值的类型。Ruby的Miss Method与Groovy的MOP反射顿时没了用武之地。 舞台已经搭好,界限已经模糊,接下来就和AOP一样,看大家的想象力了。 java 代码 - 1、定义Java接口包含在Java中需要调用的Groovy方法
- public interface IFoo {
- public Object run(Object foo);
- }
-
- 2、创建Groovy类实现该接口
- class Foo implements IFoo {
-
- public Object run(Object foo) {
- println 'Hello World!'
- x = 123
- foo * 10
- }
- }
-
- 3、动态载入Groovy类,创建接口实例,调用接口中定义的方法
- import groovy.lang.GroovyClassLoader;
-
-
-
- import java.io.File;
-
-
-
- public class InvokeGroovy {
-
- public static void main(String[] args) {
-
- ClassLoader cl = new InvokeGroovy().getClass().getClassLoader();
-
- GroovyClassLoader groovyCl = new GroovyClassLoader(cl);
-
- try {
-
- Class groovyClass = groovyCl.parseClass(new File("src/Foo.groovy"));
-
- IFoo foo = (IFoo) groovyClass.newInstance();
-
- System.out.println(foo.run(new Integer(2)));
-
- } catch (Exception e) {
-
- e.printStackTrace();
-
- }
-
- }
-
- }
二、 下面的示例说明如何在java中调用Groovy脚本.准备:到下载groovy的最新版本包,并将相关jar, 包导入工程。然后,建立脚本文件foo.groovy class GroovyCalculator { } 然后建立Java文件GroovyTest.java import java.io.File; import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyObject; public class GroovyTest { public static void main(String[] args) throws Exception ClassLoader parent = ClassLoader.getSystemClassLoader(); GroovyClassLoader loader = new GroovyClassLoader(parent); Class gclass = loader.parseClass(new File("foo.groovy")); GroovyObject groovyObject = (GroovyObject) gclass.newInstance(); Object obj = groovyObject.invokeMethod("add", new Object[] {new Integer(2), new Integer(1) }); |
http://hi.baidu.com/peng3409/blog/item/128ed539c239f7f73a87ceff.html