新西兰服务器

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


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

发布时间:2022-02-24 17:55:10 来源:高防服务器网 阅读:58 作者:iii 栏目:开发技术

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

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

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

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

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

以下为案例:

引入依赖

<dependency>  	<groupId>org.codehaus.groovy</groupId>  	<artifactId>groovy-all</artifactId>  	<version>1.2.74</version>  </dependency>

定义脚本内容并执行

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.groovy    class 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脚本的方法有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注高防服务器网网站,小编会继续努力为大家带来更多实用的文章!

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[