
最近,了解一下规则引擎,似乎名气比较大的规则引擎不多,也就是 JBoss的Drools 和 Apache 的Camel 。相对于其它品类的开源软件来说,规则引擎似乎不是很旺盛。
在了解Activiti 的时候,可以使用Groovy写一些规则,因此了解了一下Groovy。
Groovy 是一种用于 Java 虚拟机的 动态语言,它是面向对象的,既可以面向对象编程,也可以用作脚本语言。它可以和Java互相调用。
下面是一个简单的规则实现,使用java实现具体行为,Groovy实现判断逻辑。
Java 行为部分
Java 接口
public interface Fruit{ public String getname(); public String Type(); public voID show();} 对以上接口的2个实现类
public class Apple implements Fruit{ public String getname(){ return "java apple"; } public String getType(){ return "apple"; } public voID show(){ System.out.println("Show: I am a Java Apple"); }} public class Orange implements Fruit { public String getname(){ return "java orange"; } public String getType(){ return "orange"; } public voID show(){ System.out.println("Show: I am a java orange."); }} 下面是Groovy部分。
1 、Groovy 实现java接口的方式:
用于Groovy的Java 接口
public interface GroovyController { public voID controllFruit(Fruit fruit);} Groovy 的实现,另存为文件(GroovyClass.groovy),文件扩展名为 .groovy
import java.lang.String;class GroovyClass implements GroovyController{ public voID controllFruit(Fruit fruit){ fruit.show() if (fruit.getType() == "apple"){ println 'groovy apple' } if (fruit.getType() == "orange"){ println 'groovy orange'; } println 'END' }} Java load Groovy 文件,实例化 Groovy的对象,并运行。
代码片段 ,groovy文件存于D盘根下。
public static voID testGroovyClass(){ ClassLoader loader = new GroovyManager().getClass().getClassLoader(); GroovyClassLoader gLoader = new GroovyClassLoader(loader); Fruit apple = new Apple(); Fruit orange = new Orange(); try { Class groovyClass = gLoader.parseClass( new file("D:/GroovyClassdisk.groovy")); GroovyController controller = (GroovyController)groovyClass.newInstance(); controller.controllFruit(apple); controller.controllFruit(orange); System.out.println("run groovy class end"); System.out.println("another way to run groovy class with directly invoking method "); GroovyObject gobject = (GroovyObject)groovyClass.newInstance(); gobject.invokeMethod("controllFruit",apple); gobject.invokeMethod("controllFruit",orange); System.out.println("end to running groovy class "); } catch (CompilationFailedException e) { e.printstacktrace(); } catch (IOException e) { e.printstacktrace(); } catch (URISyntaxException e) { e.printstacktrace(); } catch (InstantiationException e) { e.printstacktrace(); } catch (illegalaccessexception e) { e.printstacktrace(); } } 结果:
Show: I am a java apple.disk groovy appleENDShow: I am a java orange.disk groovy orangeENDrun groovy class endanother way to run groovy class with directly invoking method Show: I am a java apple.disk groovy appleENDShow: I am a java orange.disk groovy orangeENDend to running groovy class
2、Groovy Script的方式
Groovy Script:
fruit.show()if (fruit.getType() == "apple"){ println 'script groovy apple'}if (fruit.getType() == "orange"){ println 'script groovy orange'}println 'END' Java load Groovy script and run
public static voID testGroovyScript(){ Fruit apple = new Apple(); Fruit orange = new Orange(); String scriptText = null; try { scriptText = fileUtils.readfileToString(new file("d:/GroovyScript.groovy")); } catch (IOException e) { e.printstacktrace(); } // Using Script engine ScriptEngineManager manager = new ScriptEngineManager(GroovyManager.class.getClassLoader()); ScriptEngine scriptEng = manager.getEngineByname("Groovy"); try { scriptEng.put("fruit",apple); scriptEng.eval(scriptText); scriptEng.put("fruit",orange); scriptEng.eval(scriptText); } catch (ScriptException e) { e.printstacktrace(); } System.out.println("ending using Script engine"); System.out.println("Begin to use Groovy bind"); Binding bind = new Binding(); groovyshell gs = new groovyshell(bind); bind.setProperty("fruit",apple); gs.evaluate(scriptText); bind.setProperty("fruit",orange); gs.evaluate(scriptText); System.out.println("end to use Groovy bind"); } 结果:
Show: I am a java apple.script groovy appleENDShow: I am a java orange.script groovy orangeENDending using Script engineBegin to use Groovy bindShow: I am a java apple.script groovy appleENDShow: I am a java orange.script groovy orangeENDend to use Groovy bind
以上为简单的例子。似乎可以实现规则引擎的一些功能。而且 Groovy也不难用。上面例子中的文件都没有路径,如果加上路径的话,
Groovy的编写使用跟java相同的import,要让groovy代码中能够找到java类的路。在此记录一下。
总结以上是内存溢出为你收集整理的Learning Groovy全部内容,希望文章能够帮你解决Learning Groovy所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)