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类的路。在此记录一下。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
