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提供了很好的动态语言能力,如果项目没有必要使用太重量级的规则引擎,
那么使用动态语言让业务人员直接配置也不失为一个好方法。