Learning Groovy

Learning Groovy,第1张

概述最近,了解一下规则引擎,似乎名气比较大的规则引擎不多,也就是 JBoss的Drools 和 Apache 的Camel 。相对于其它品类的开源软件来说,规则引擎似乎不是很旺盛。 在了解Activiti 的时候,可以使用Groovy写一些规则,因此了解了一下Groovy。 Groovy 是一种用于 Java 虚拟机的 动态语言,它是面向对象的,既可以面向对象编程,也可以用作脚本语言。它可以和Java

最近,了解一下规则引擎,似乎名气比较大的规则引擎不多,也就是 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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1265384.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存