使用方式
GroovyShell
groovyshell 是 groovy 的一个核心类,它可以在 java 中执行 groovy 代码。
我们先写一个简单的groovy测试脚本,输出 “hello world”。
package com.arm.groovyprintln("GroovyShell test : hello world");
那么在java中怎么调用呢?其实只需要3行代码就可以了:
GroovyShell shell = new GroovyShell();script script = shell.parse(new FileReader("test.groovy"));script.run();
其执行过程是:首先实例化一个GroovyShell的对象,然后通过GroovyShell解析groovy脚本文件的内容并返回script对象,最后执行run()方法,执行脚本内容。
这种方式支持支持 REPL(Read-eval-Print Loop)模式,可以在命令行中逐行输入和执行 Groovy 代码。适用于快速测试和调试 Groovy 代码,或者是项目中有独立的可执行的groovy脚本文件。
立即学习“Java免费学习笔记(深入)”;
GroovyclassLoader
我们先写一个简单的groovy测试脚本,输出 “hello world”。
package com.arm.groovydef test() { println("GroovyClassLoader test : hello world");}
那么在java中怎么调用呢?
try (GroovyClassLoader classLoader = new GroovyClassLoader()) { Class<?> groovyClass = classLoader.parseClass(new File("test.groovy")); GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance(); groovyObject.invokeMethod("test", null);}
其执行过程是:首先实例化一个GroovyClassLoader的对象,然后通过GroovyClassLoader 解析groovy脚本并生成一个Class文件,在然后实例化一个GroovyObject,通过GroovyObject执行脚本中的方法。
可以看到这种方式比较强大的,其通过类加载的方式进行脚本的加载和解析,使其在java中可以像调用java类的方法一样调用groovy脚本中的方法。因此GroovyClassLoader 适用于需要动态加载和执行 Groovy 脚本的场景,如插件化系统、动态扩展;也适用于一些需要在运行时动态生成和编译代码的场景。
比如我们可以定义个groovy类,其实现一个java接口,在java运行时我们可以将这个groovy加载到spring容器中,通过bean的方式使用groovy脚本。
当然这种方式我们也可以直接写脚本代码,而无需要脚本文件:
Binding binding = new Binding();binding.setVariable("name", "Groovy");GroovyShell shell = new GroovyShell(binding);Object result = shell.evaluate("println 'Hello, ' + name");
上述示例直接用 shell.evaluate() 的方式直接执行脚本语句。
ScriptEngineManager
首先我们还是准备一个脚本文件:
package com.arm.groovyprintln("ScriptEngineManager test : hello world");
java调用:
ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("groovy");engine.eval(new FileReader("test.groovy"));
其实这种方式和第一种方式大同小异,二选其一就可以了。