java与Groovy的整合(II)

news/2024/7/7 1:28:56
 
  • 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

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
}

}

上面的Action类是Groovy类,同样扩展ActionSupport,这里要注意:

execute()方法没有throws Exception语句,这是因为目前的Groovy还没有这个Java特性,这需要在以后的版本中增加;如果添加,编译会报错

execute()方法返回时,不要使用类似SUCCESS的常量,而是用对应的值(如"success");如果使用SUCCESS,Groovy会把它解析成类的属性,抛异常

当然,在/WEB-INF/lib目录下需要包含运行以依赖的jar文件:Groovy和ASM.

首先强烈遣责water ye同学不负责任的行为,那家伙在blog上贴了一段spring 2.0m2的test代码就了事,居然不测试一下,结果俺的spring groovy test代码折腾半天才过去。

测试代码俺就不贴了,spring的配置就够了

1  <? xml version="1.0" encoding="GBK" ?>
 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>写,我为了美观,弄成下面两种写法都没过去。


http://www.niftyadmin.cn/n/3641954.html

相关文章

【Leetcode】1844. Replace All Digits with Characters

题目地址&#xff1a; https://leetcode.com/problems/replace-all-digits-with-characters/ 给定一个字符串sss&#xff0c;其只含小写字母和数字&#xff0c;并且偶数下标的全是小写字母&#xff0c;奇数下标的全是单个数字。要求将sss中的数字都改为其前一个字母加上这个数…

【Leetcode】848. Shifting Letters

题目地址&#xff1a; https://leetcode.com/problems/shifting-letters/ 给定一个小写英文字母的长nnn字符串sss&#xff0c;和一个等长的非负整数数组AAA&#xff0c;要求先将s[0]s[0]s[0]字符增加A[0]A[0]A[0]这么多数&#xff0c;然后将s[0:1]s[0:1]s[0:1]增加A[1]A[1]A[…

实现主成分分析与白化

在这一节里&#xff0c;我们将总结PCA,ZCA白化算法&#xff0c;并描述如何使用高效的线性代数库来实现它们。 首先&#xff0c;我们需要确保数据的均值&#xff08;近似&#xff09;为零。对于自然图像&#xff0c;我们通过减去每个图像块(patch)的均值&#xff08;近似地&…

实战 Groovy: Groovy:Java 程序员的 DSL

实战 Groovy: Groovy&#xff1a;Java 程序员的 DSL 用 Groovy 编写更少的代码&#xff0c;完成更多的工作Scott Davis, 创始人, ThirstyHead.comScott Davis 是国际知名作家、演讲家、软件开发人员。他是 ThirstyHead.com 的创始人&#xff0c;这是一家 Groovy 和 Grails 培训…

【Leetcode】1106. Parsing A Boolean Expression

题目地址&#xff1a; https://leetcode.com/problems/parsing-a-boolean-expression/ 给定一个表达式&#xff0c;该表达式是个类似于前缀表达式的布尔表达式&#xff0c;其中t代表true&#xff0c;f代表false&#xff0c;其定义是递归的&#xff1a; 1、单个t或者f是个表达…

通过与Java的比较,迅速掌握Groovy

Groovy轻松入门——通过与Java的比较&#xff0c;迅速掌握Groovy &#xff08;更新于2008.10.18&#xff09; 在前几篇文章中&#xff0c;我已经向大家介绍了Groovy是什么&#xff0c;学习Groovy的重要性等内容&#xff0c;还不了解Groovy的朋友不妨去看看我Blog中的 Groovy分类…

Test Manager之添加需求类型工作项

Test Manager 在创建套件的时候&#xff0c;会添加要求&#xff0c;这个地方只能添加需求。有时我们的工作项可能不叫需求&#xff0c;那么此时直接添加是无法添加的。我们可以通过配置进行实现。 1、进入服务器 2、允许输入cmd 3、 64位进入&#xff0c;cd C:\Program Files (…

【Leetcode】1323. Maximum 69 Number

题目地址&#xff1a; https://leetcode.com/problems/maximum-69-number/ 给定一个只含666和999的十进制数nnn&#xff0c;最多允许将其中一个666改为999&#xff08;允许不改&#xff09;&#xff0c;问能得到的最大数是几。 显然要改最高的666&#xff0c;如果全是999则不…