Groovy 是 “用于 Java 虚拟机的一种敏捷的动态语言”,它 “以 Java 的强大功能 为基础,同时又包含由 Python、Ruby 和 Smalltalk 等语言带来的强大附加功能 ”,例如动态类 型转换、闭包和元编程(metaprogramming)支持。它是一种 成熟的面向对象编程语 言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。
Groovy 特别适合与 Spring 的动态语言支持一 起使用,因为它是专门为 JVM 设计的,设计时充分考虑了 Java 集成,这使 Groovy 与 Java 代码的互 操作很容易。它的类 Java 语法对于 Java 开发人员来说也很自然。
在Spring中动态使用Groovy脚本
(1)首先 编写java的业务接口类
package com.springandgroovy;
public interface HelloWorldService {
String sayHello();
}
(2) 编写groovy类实现这个接口(注意:该文件名是HelloWorldServiceImpl.groovy)
package com.springandgroovy;
public class HelloWorldServiceImpl implements HelloWorldService{
String name;
String sayHello(){
return "Hello $name!!!. Welcome to Scripting in Groovy.";
}
}
(3)比较关键的是spring配置文件,在文件的头部需要lang的名字空间,以便识别 <lang:groovy ...
<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-2.5.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang-2.5.xsd">
<lang:groovy id="helloWorldService"
script-source="classpath:com/springandgroovy/HelloWorldServiceImpl.groovy">
<lang:property name="name" value="meera"/>
</lang:groovy>
</beans>
(4) 另外,可以设置默认的延时刷新时间:
<lang:defaults refresh-check-delay=”60000″ />
<lang:groovy id=”helloWorldService” refresh-check-delay=”1000″
script-source=”classpath:com/springandgroovy/HelloWorldServiceImpl.groovy”>
<lang:property name="name" value="meera"/>
</lang:groovy>
(5)测试
package com.springandgroovy;
import java.io.IOException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) throws IOException {
ApplicationContext context = new ClassPathXmlApplicationContext("groovySpring.xml");
HelloWorldService service = (HelloWorldService) context.getBean("helloWorldService");
System.in.read();
System.out.println(service.sayHello());
}
}
(6)还可以将HelloWorldServiceImpl写在spring的配置文件中,如下所示:(不提倡使用此方法)
<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-2.5.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang-2.5.xsd">
<!--
<lang:groovy id="helloWorldService"
script-source="classpath:com/springandgroovy/HelloWorldServiceImpl.groovy">
<lang:property name="name" value="meera">
</lang:groovy>
-->
<lang:groovy id="helloWorldService">
<lang:inline-script>
<![CDATA[
package com.springandgroovy;
public class HelloWorldServiceImpl implements HelloWorldService{
String name;
String sayHello(){
return "Hello $name. Welcome to Scripting in Groovy.";
}
}
]]>
</lang:inline-script>
<lang:property name="name" value="meera"></lang:property>
</lang:groovy>
</beans>