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代码。"])  
    }  
}