文章目录
目录
java有三种方式调用groovy脚本。但是真正在实际的服务器环境中,嵌入groovy脚本往往需要满足下面的条件:
通过GroovyClassLoader动态加载Groovy Class
使用GroovyScriptEngine脚本引擎加载Groovy脚本
一、groovy是什么?
Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,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脚本往往需要满足下面的条件:
-
可以直接调用groovy脚本中的方法
-
能传递对象到groovy方法中,不仅仅是字符串
-
提供脚本缓存机制,不用每次调用脚本的时候,都到磁盘读取
-
修改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脚本做数据结构转换适应大屏的各种组件展示。小编已经实现目测提高了很大的开发效率