加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

groovy脚本

发布时间:2020-12-14 16:44:01 所属栏目:大数据 来源:网络整理
导读:groovy脚本不知为何物?anyway,下面通过简单一个示例帮你揭开groovy的神秘面纱。 0x01 groovy脚本 groovy脚本在我的使用过程中,其语法和java语法非常类似,但是其是有一套属于自己的脚本的,我们可以通过在java代码中调用groovy脚本,就像调用一个方法一样

groovy脚本不知为何物?anyway,下面通过简单一个示例帮你揭开groovy的神秘面纱。

0x01 groovy脚本

groovy脚本在我的使用过程中,其语法和java语法非常类似,但是其是有一套属于自己的脚本的,我们可以通过在java代码中调用groovy脚本,就像调用一个方法一样,可以给groovy脚本传递一些必须的参数。

0x02 groovy脚本实例

这里介绍在java中调用groovy脚本的方式示例如下:

public class GroovyScriptClient {

    private static final String scriptContent = "String object = scriptContext.get("object");" +
            "        return innerService.sayBye(object);";

    public static Script getGroovyScript(){

        Class<Script> clazz = clazz = new GroovyClassLoader().parseClass(scriptContent);

        Script script = null;

        try {
            script = clazz.newInstance();
        } catch (Exception ex){
            System.out.println("exception" + ex);
        }

        Map<String,String> params = new HashMap<String,String>();

        params.put("object","yesterday");

        Binding binding = new Binding();
        binding.setVariable("scriptContext",params);
        binding.setVariable("innerService",new ServiceTest());

        script.setBinding(binding);

        return script;
    }

    public static void main (String args[]){
        Script script = GroovyScriptClient.getGroovyScript();
        Object scriptResult = script.run();
        System.out.println(scriptResult);
    }

};

class ServiceTest{

    public String sayBye(String object){
        return "forget " + object;
    }
}
  • 上面是一段脚本的测试代码,这段代码可以算是一个脚本引擎的缩影,一个脚本引擎系统的核心。

  • scriptContent是一段简单的groovy脚本

  • groovy.lang.GroovyClassLoader#parseClass(java.lang.String)解析脚本字符串

  • 通过groovy.lang.Binding可以给脚本传递参数。

  • innerService的value是一个对象,在脚本中可以直接使用这个对象,非常的方便。

0x03 思考

适用与一些不需要发布但是经常需要改变的情景,规模大的也可以用于做脚本引擎。同时编写脚本不需要对系统进行升级发布减少了很多发布流程,灵活修改等好处,后面还要加强groovy脚本的理解,可以考虑后续写一个脚本引擎来玩玩。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读