-
Groovy与流行框架的集成
1.与Spring的集成
现在Spring的核心包就提供了与Groovy的集成了,,很好,很强大,这样就可以显示业务逻辑的动态改变了
由于Groovy的代码中也有描述Java代码的机制,因此两者合用非常容易
Spring Bean:
代码
class="org.springframework.beans.factory.groovy.GroovyFactory">
20
下面是groovy的例子:代码
factory-bean="groovyScriptFactory"
factory-method="create">
SimpleHello.groovy
groovy文件:代码
package org.springframework.beans.factory.groovy;
class Test implements Hello {
String sayHello() {
"hello world"
}
}2.与webwork的集成
在WebWork2中,可以使用Groovy实现Action类来简化代码,提高编码效率
例子:
package web
上面的Action类是Groovy类,同样扩展ActionSupport,这里要注意:
import java.util.Date
import org.apache.commons.logging.Log
import org.apache.commons.logging.LogFactory
import com.opensymphony.xwork.ActionSupport
class GroovyAction extends ActionSupport {
protected final Log logger = LogFactory.getLog(getClass())
private String now
String execute() {
now = "${new Date()}"
logger.info("returning view with ${now}")
"success"
}
void setNow(String now) {
this.now = now
}
String getNow() {
now
}
}execute()方法没有throws Exception语句,这是因为目前的Groovy还没有这个Java特性,这需要在以后的版本中增加;如果添加,编译会报错
execute()方法返回时,不要使用类似SUCCESS的常量,而是用对应的值(如"success");如果使用SUCCESS,Groovy会把它解析成类的属性,抛异常
当然,在/WEB-INF/lib目录下需要包含运行以依赖的jar文件:Groovy和ASM.
1 <? xml version="1.0" encoding="GBK" ?>
首先强烈遣责water ye同学不负责任的行为,那家伙在blog上贴了一段spring 2.0m2的test代码就了事,居然不测试一下,结果俺的spring groovy test代码折腾半天才过去。
测试代码俺就不贴了,spring的配置就够了
2 <! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
3 "http://www.springframework.org/dtd/spring-beans.dtd" >
4 < beans >
5 < bean class ="org.springframework.scripting.support.ScriptFactoryPostProcessor" />
6 < bean id ="inlineMessenger" class ="org.springframework.scripting.groovy.GroovyScriptFactory" >
7 < constructor-arg >
8 < value > inline:
9 package spring.groovy;
10
11 class GroovyInlineMessenger implements Messenger{
12 void sayHello(){
13 System.err.println("Hello");
14 }
15 }
16 </ value >
17 </ constructor-arg >
18 </ bean >
19 < bean id ="messenger" class ="org.springframework.scripting.groovy.GroovyScriptFactory" >
20 < constructor-arg value ="classpath:spring/groovy/GroovyMessenger.groovy" />
21 < property name ="message" value ="Hello World!" />
22 </ bean >
23 </ beans >
1、第5行的bean定义一定要有,估计是提前编译groovy脚本的(具体的可能啃一下源码就明白了)。
2、inlineMessenger这个bean的定义,inline一定要紧跟着<value>写,我为了美观,弄成下面两种写法都没过去。