JAVA 之 Groovy的巧妙之处

1 篇文章 1 订阅
1 篇文章 0 订阅

文章目录

目录

文章目录

一、groovy是什么?

二、使用步骤

1.引入库

2.JAVA调用groovy

java有三种方式调用groovy脚本。但是真正在实际的服务器环境中,嵌入groovy脚本往往需要满足下面的条件:

通过GroovyShell来执行groovy脚本

通过GroovyClassLoader动态加载Groovy Class

使用GroovyScriptEngine脚本引擎加载Groovy脚本

总结


一、groovy是什么?

Groovy是一种基于JVMJava虚拟机)的敏捷开发语言,它结合了PythonRubySmalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。也是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码的互操作很容易。(注意:不是指Groovy替代java,而是指Groovy和java很好的结合编程

二、使用步骤

1.引入库

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.5.6</version>
            <type>pom</type>
        </dependency>

2.JAVA调用groovy

java有三种方式调用groovy脚本。但是真正在实际的服务器环境中,嵌入groovy脚本往往需要满足下面的条件:

  1. 可以直接调用groovy脚本中的方法

  2. 能传递对象到groovy方法中,不仅仅是字符串

  3. 提供脚本缓存机制,不用每次调用脚本的时候,都到磁盘读取

  4. 修改groovy后能实时生效

第一种:通过GroovyShell来执行groovy脚本
第二种:通过GroovyClassLoader动态加载Groovy Class
第三种:使用GroovyScriptEngine脚本引擎加载Groovy脚本

通过GroovyShell来执行groovy脚本

private static GroovyShell groovyShell = new GroovyShell();

private static <T> T invoke(String scriptText, String function, Object... objects) throws Exception {
    Script script= groovyShell.parse(scriptText);
    return (T) InvokerHelper.invokeMethod(script, function, objects);
}

通过GroovyClassLoader动态加载Groovy Class

private static void invoke(String scriptText, String function, Object... objects) throws Exception {
        GroovyClassLoader classLoader = new GroovyClassLoader();
        Class groovyClass = classLoader.parseClass(scriptText);
        try {
            GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
            groovyObject.invokeMethod(function,objects);
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

使用GroovyScriptEngine脚本引擎加载Groovy脚本

private static final GroovyScriptEngineFactory scriptEngineFactory = new GroovyScriptEngineFactory();
 
private static <T> T invoke(String script, String function, Object... objects) throws Exception {
    ScriptEngine scriptEngine = scriptEngineFactory.getScriptEngine();
    scriptEngine.eval(script);
    return (T) ((Invocable) scriptEngine).invokeFunction(function, objects);
}

总结

我们可以利用Groovy的灵活性做数据转换,我们日常写的各种简单的查询,可以固话为一个接口,其中的数据结构转换逻辑我么可以利用groovyShell执行groovy脚本做转换,将脚本保存数据库实现灵活修改,提高开发效率。时下大屏展示数据趋势很猛,需要的接口基本是汇总表的数据直接展示,我们就可以用一个接口植入不同groovy脚本做数据结构转换适应大屏的各种组件展示。小编已经实现目测提高了很大的开发效率

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值