groovy脚本执行与优化

1. 背景

Apache的Groovy是Java平台上设计的面向对象编程语言。这门动态语言拥有类似Python、Ruby和Smalltalk中的一些特性,可以作为Java平台的脚本语言使用,Groovy代码动态地编译成运行于Java虚拟机(JVM)上的Java字节码,并与其他Java代码和库进行互操作。由于其运行在JVM上的特性,Groovy可以使用其他Java语言编写的库。Groovy的语法与Java非常相似,大多数Java代码也符合Groovy的语法规则,尽管可能语义不同。

------来自wikipedia

在网上看到看到一个很有意思的比喻,Groovy之于Java,就好比狂草之于楷书。写好了一样赏心悦目,但是正式场合(企业级开发)还是严肃一点的多。

但Groovy的灵活性、Java良好的兼容(JVM)、本身的语法对于Java工程师来说学习成本不高使得其成为了一项被广泛使用的脚本语言。

 

2. 实现

单纯实现Groovy脚本执行很简单,一般有三种方式,GroovyClassLoader,GroovyShell,GroovyScirptEngine。它们之间的区别在于:

GroovyClassLoader 会动态地加载一个脚本并执行它,可使用Binding对象输入参数。GroovyClassLoader是一个定制的类装载器,负责解释加载Java类中用到的Groovy类。

 

GroovyShell允许在Java类中求任意Groovy表达式的值。可使用Binding对象输入参数给表达式,并最终通过GroovyShell返回Groovy表达式的计算结果,GroovyShell还支持一些沙盒环境等特性,多用于推求对立的脚本或表达式。

 

GroovyScirptEngine作为一个引擎,功能更全面,它本身提供一些脚本的缓存等机制。,如果换成相互关联的多个脚本,使用GroovyScriptEngine会更好些。GroovyScriptEngine从您指定的位置(文件系统,URL,数据库,等等)加载Groovy脚本,并且随着脚本变化而重新加载它们。同样,也允许传入参数值,并能返回脚本的值。

 

针对本次的使用场景,最终使用的是groovyshell,原因在于使用脚本的场景更多的是想依赖其灵活动态的特性,不想Java逻辑一变就需要重新发布。而本身脚本的逻辑不会特别复杂,更多的是对传入的参数进行简单的计算看是否符合期望。那么,不要对主流程甚至是JVM本身,应用本身造成影响是我们着重考虑的点。

 

2.1 最简单的实现

GroovyClassLoader groovyLoader = new GroovyClassLoader();
Class
                    
                    

你可能感兴趣的:(Java)