千家信息网

Java执行groovy脚本的方法有哪些

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"Java执行groovy脚本的方法有哪些",在日常操作中,相信很多人在Java执行groovy脚本的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2025年01月19日Java执行groovy脚本的方法有哪些

这篇文章主要介绍"Java执行groovy脚本的方法有哪些",在日常操作中,相信很多人在Java执行groovy脚本的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java执行groovy脚本的方法有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Java执行groovy脚本的两种方式:

一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容;一种是执行groovy脚本;

二者都通过Invocable来传递参数并获取执行结果;

Invocable:脚本引擎的解释器接口,提供invokeFunctioninvokeMethod两种传递参数并获取执行结果的方法

以下为案例:

引入依赖

        org.codehaus.groovy        groovy-all        1.2.74

定义脚本内容并执行

public void testByFunction(){    // 初始化Bindings    Bindings bindings = engine.createBindings();    // 绑定参数    bindings.put("date", new Date());    final String name = "groovy";    // 定义groovy脚本中执行方法的名称    final String scriptName = "execute";    // 定义groovy脚本内容    final String scriptContent = "def " + scriptName +"(name){" +                                 "    println("now dateTime is: ${date.getTime()}");" +                                 "    println("my name is $name");" +                                 "    return date.getTime() > 0;" +                                 "}";    try {        // 执行脚本        engine.eval(scriptContent, bindings);        // 获取执行结果        Invocable invocable = (Invocable) engine;        Boolean flag = (Boolean) invocable.invokeFunction(scriptName, name);        System.out.println("---------------------------------------");        System.out.println("result is: " + flag);    } catch (ScriptException | NoSuchMethodException e) {        e.printStackTrace();    }}

运行结果:

  • invokeFunction方法的第一个参数为脚本的函数名称,把scriptName拎出来通过创建String对象再赋值进去,方便你看懂函数名称到底是哪个;

  • scriptContent${date.getTime()}$name的意思一样,grovvy中的字符串可以识别${}$占位符;

  • bindings绑定参数与invokeFunction方法的第二个参数的区别是,前者是脚本内全局的,而后者是定义在函数内的;

实例化脚本对象并执行

public void testByMethod(){    try {        // 初始化groovy脚本对象        final TestGroovy testGroovy = new TestGroovy();        // 定义groovy脚本中执行方法的名称        final String scriptName = "execute";        // 定义参数        final Date arg_1 = new Date();        final String arg_2 = "groovy";        // 执行脚本并获取结果        Invocable invocable = (Invocable) engine;        Boolean flag = (Boolean) invocable.invokeMethod(testGroovy, scriptName, arg_1, arg_2);        System.out.println("---------------------------------------");        System.out.println("result is: " + flag);    } catch (ScriptException |NoSuchMethodException e) {        e.printStackTrace();    }}

TestGroovy.groovy脚本内容:

package com.dandelion.groovyclass TestGroovy {   static def execute(Date date, String name){        println("now dateTime is: ${date.getTime()}");        println("my name is $name");        return date.getTime() < 0;    }}

invokeMethod方法的第一个参数是脚本对象,第二个参数是脚本中的函数名称,之后为绑定的参数;

源码:

package com.dandelion.test;import com.dandelion.groovy.TestGroovy;import javax.script.*;import java.util.Date;public class TestScriptEngine {    // 查找并创建指定脚本引擎    private ScriptEngine engine = new ScriptEngineManager().getEngineByName("groovy");    public void testByFunction(){        // 初始化Bindings        Bindings bindings = engine.createBindings();        // 绑定参数        bindings.put("date", new Date());        // 定义groovy脚本中执行方法的名称        final String scriptName = "execute";        // 定义groovy脚本内容        final String scriptContent = "def " + scriptName +"(){" +                                     "    println("now dateTime is: ${date.getTime()}");" +                                     "    return date.getTime() > 0;" +                                     "}";        try {            // 执行脚本            engine.eval(scriptContent, bindings);            // 获取执行结果            Invocable invocable = (Invocable) engine;            Boolean flag = (Boolean) invocable.invokeFunction(scriptName);            System.out.println("---------------------------------------");            System.out.println("result is: " + flag);        } catch (ScriptException | NoSuchMethodException e) {            e.printStackTrace();        }    }    public void testByMethod(){        try {            // 初始化groovy脚本对象            final TestGroovy testGroovy = new TestGroovy();            // 定义groovy脚本中执行方法的名称            final String scriptName = "execute";            // 定义参数            final Date arg_1 = new Date();            final String arg_2 = "groovy";            // 执行脚本并获取结果            Invocable invocable = (Invocable) engine;            Boolean flag = (Boolean) invocable.invokeMethod(testGroovy, scriptName, arg_1, arg_2);            System.out.println("---------------------------------------");            System.out.println("result is: " + flag);        } catch (ScriptException |NoSuchMethodException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        TestScriptEngine engine = new TestScriptEngine();        engine.testByFunction();    }}

到此,关于"Java执行groovy脚本的方法有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0