http://docs.groovy-lang.org/docs/groovy-3.0.7/ http://docs.groovy-lang.org/latest/html/documentation/ https://docs.micronaut.io/latest/guide/index.html https://gitter.im/micronautfw/questions?source=orgpage https://micronaut.io/launch/ http://blog.chinaunix.net/uid-28248011-id-4978471.html https://www.cnblogs.com/ricoo/p/15481731.html#_label0 https://blog.csdn.net/wangjolly/article/details/8921954 https://www.pianshen.com/article/44161836163/ https://blog.mrhaki.com/search/label/Groovy
Closure
// 在数据库里面(Component.script字段),正确闭包定义
return { params ->
["result": "success", data: "处理结果"]
}
RetService execute(Component component, Object object, Object realPath = null) {
// 注意: 需要使用同一个classLoader, 不同的加载器产生的对象没法一起用, 会转换失败.
def shell = new GroovyShell(getClass().classLoader)
def closure
// 如果script的内容是基本的Groovy代码,直接执行,返回的不是闭包
try {
closure = shell.evaluate(component?.script)
} catch (Exception e) {
log.error("执行出错:" + e.message)
return RetService.fail([result: e.message])
}
// 如果里面返回的是 Closure,就执行 Closure if (closure instanceof Closure) {
try {
if (!realPath) {
if (!object) {
return RetService.success(closure as Map)
} else {
return RetService.success(closure(object) as Map)
}
} else {
return RetService.success(closure(object, realPath) as Map)
}
} catch (Exception e) {
log.error("执行出错:" + e.message)
return RetService.fail([result: e.message])
}
} else {
return RetService.fail([result: "脚本内容有误,不是有效的Closure代码。"])
}
}