Learning Groovy
发布时间:2020-12-14 16:50:31 所属栏目:大数据 来源:网络整理
导读:最近,了解一下规则引擎,似乎名气比较大的规则引擎不多,也就是 JBoss的Drools 和 Apache 的Camel?。相对于其它品类的开源软件来说,规则引擎似乎不是很旺盛。 在了解Activiti 的时候,可以使用Groovy写一些规则,因此了解了一下Groovy。 Groovy?是一种用于
最近,了解一下规则引擎,似乎名气比较大的规则引擎不多,也就是 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 apple END Show: I am a java orange. disk groovy orange END run groovy class end another way to run groovy class with directly invoking method Show: I am a java apple. disk groovy apple END Show: I am a java orange. disk groovy orange END end 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 apple END Show: I am a java orange. script groovy orange END ending using Script engine Begin to use Groovy bind Show: I am a java apple. script groovy apple END Show: I am a java orange. script groovy orange END end to use Groovy bind 以上为简单的例子。似乎可以实现规则引擎的一些功能。而且 Groovy也不难用。上面例子中的文件都没有路径,如果加上路径的话, Groovy的编写使用跟java相同的import,要让groovy代码中能够找到java类的路。在此记录一下。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |