1.使用背景:項目中想使用規則引擎,調研后發現流行的開源規則引擎都比較重量級,考慮到項目只需要通過配置文件設定規則集,故使用java動態使用groovy即可達到目的;
2.通過以下方式配置spring使用groovy,和采用java編程沒有太大區別,groovy提供較平順的從java過來的學習曲線,下面的例子中的groovy類活生生就是一個java類,只不過是寫在xml文件中的java類罷了;
3.spring通過org.springframework.scripting.groovy.GroovyScriptFactory類反射生成groovy類,由于使用到jdk的動態代理,所以所有用groovy定義的類必須實現java定義的接口,這是可以運行的關鍵;
4.配置spring.xml
<beans xmlns="http://www.springframework.org/schema/beans"
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-2.5.xsd
"
default-autowire="byName">
此文件頭必不可少,否則無法識別lang標簽;
<lang:groovy id="groovyHello" >
<lang:inline-script>
<![CDATA[
package com.jd.fms;
import com.jd.fms.netty.GroovyHelloWorld;
public class TestGroovyHelloWorld implements GroovyHelloWorld{
public void doit(){
System.out.println("hello world");
}
}
]]>
</lang:inline-script>
</lang:groovy>
采用lang:groovy定義groovy片段,當然也可以采用
<lang:groovy id=" script-source="....">的方式引入文件。
不要忘記的是在工程中定義GroovyHelloWorld的接口,該接口需要實現一個doit方法。
5.項目中直接通過
@Autowired GroovyHelloWorld groovyHelloWorld;
調用即可;
6.groovy為java提供了很好的動態語言能力,如果項目沒有必要使用太重量級的規則引擎,
那么使用動態語言讓業務人員直接配置也不失為一個好方法。