Groovy 是 「用於 Java 虛擬機的一種敏捷的動態語言」,它 「以 Java 的強大功能 爲基礎,同時又包含由 Python、Ruby 和 Smalltalk 等語言帶來的強大附加功能 」,例如動態類 型轉換、閉包和元編程(metaprogramming)支持。它是一種 成熟的面向對象編程語 言,既能夠用於面向對象編程,又能夠用做純粹的腳本語言。java
Groovy 特別適合與 Spring 的動態語言支持一 起使用,由於它是專門爲 JVM 設計的,設計時充分考慮了 Java 集成,這使 Groovy 與 Java 代碼的互 操做很容易。它的類 Java 語法對於 Java 開發人員來講也很天然。spring
在Spring中動態使用Groovy腳本
(1)首先 編寫java的業務接口類
編程
package com.springandgroovy;閉包
public interface HelloWorldService {ide
String sayHello();測試
}spa
(2) 編寫groovy類實現這個接口(注意:該文件名是HelloWorldServiceImpl.groovy)設計
package com.springandgroovy;xml
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>