背景
在游戏开发中,lua脚本被大量运用。其思路是,将脚本作为黏合组件的胶水,利用基础组件提供的功能,灵活地组合出各种不同的功能,就好像创造出一种新的DSL(domain specific language)一样。在后端开发中,显然也可以借鉴这里面的宝贵经验。在java生态下,使用groovy就显得自然而然。
why groovy
作为厚重java组件的胶水语言,他具有以下优势:
- 完全兼容java语法
到了groovy3,new String[]{"a"}
、(a,b) -> a+b
等java语法也得到了支持,def m = [:] as Map<String, List<String>>
在groovy2中因为末尾的>导致编译器解析报错的bug也得到了解决——这门语言还是在蓬勃发展呀! - 集成方式简单
使用GroovyShell类即可。网上有很多集成的方法,这里就略去不表了。 - 老生常谈
“java程序员更容易接受groovy,学习曲线平滑”。这在实际中真没发现=.=。即使《clean code》早在上个世纪就已经完成了,今天大多数coder还是会使用cv大法。人们显得功利和浮躁,往往不会去了解技术的本质。
有本书提过的“救火”类程序员竟然是真实存在的。根据我多年的java经验,这个虚拟机很温柔,说java是现存最简单的语言也不为过,因为市面上大把的是培训三个月出来混的,其创造力十分惊人,写出下面的代码就不足为奇了。
Map map = new HashMap() {
{
put("a", 1);
put("")
}};
第一眼看去,很多人注意到这代码没好好写泛型。然而,应该还有更多人不知道上面代码里所谓的“动态初始化块”、以及其创造出一个匿名内部类的事实(有个5年java工作经验的同事竟也不知道)。
题外话扯多了,干脆再说一句吧。写出好的代码和语言无关,详见redis源码,因为好的代码用所有语言写出来都是一个样的,不好的代码才是千奇百怪。尤其对jvm而言,当你写的代码足够好的时候,性能自然而然就好了。根本没所谓的调优一说。至少在我的实践里这是真的。
回归主题
springboot如何从groovy脚本环境中受益呢?比如你开发了个接口,为了稳健,一般即使没有绩效上的要求,你也会加个查询接口,暴露一些内部的东西,或者去跟踪程序的运行。这样做,每次会产生很多接口,让人头晕@@。
理论来讲,没用且重复的代码还是少点为好,不然太多的垃圾信息会掩埋真正需要关心内容。
我们可以用脚本来轻松达到目的。空说无益,用几个例子来展示下脚本的价值吧!假设我们已经初始化好GroovyShell:
def binding = new Binding()