首页  

groovy实例     所属分类 groovy 浏览量 829
动态编译 
实例化 转换成指定接口

public interface RunIntf {
    Object execute(Map context);   
}


import java.util.HashMap;
import java.util.Map;
import groovy.lang.GroovyClassLoader;

public class GroovyParseToInterfaceDemo {
    public static void main(String[] args) throws Exception {   
        System.out.println("GroovyParseToInterfaceDemo");          
        //  转换成具体接口
        StringBuilder code = new StringBuilder();
        code.append("package dyyx;").append("\n");
        code.append("import java.time.LocalDateTime;").append("\n");
        code.append("import java.util.Map;").append("\n");
        code.append("public class TestIntfImpl implements dyyx.RunIntf {").append("\n");
        code.append("public Object execute(Map context) {").append("\n");
        // code.append("return LocalDateTime.now().toString();").append("\n");
        code.append("return 'hello,'+context.get('name');").append("\n");
        code.append("}").append("\n");
        code.append("}").append("\n");

        System.out.println(code);
        GroovyClassLoader loader = new GroovyClassLoader();
        // gcs.setCachable(false);  
        // 默认不缓存 ,每次都会创建新的 ,代码相同也不会缓存
        Class groovyClass = loader.parseClass(code.toString()); 
        System.out.println(groovyClass);
        // 可以缓存起来 
        RunIntf intf = (RunIntf) groovyClass.newInstance(); 
        Map map = new HashMap();
        map.put("name", "dyyx");
        System.out.println(intf.execute(map));     
    }       
}


完整代码
https://gitee.com/dyyx/mveldemo/blob/master/src/main/java/dyyx/GroovyParseToInterfaceDemo.java

其他例子
GroovyShell evaluate
编译代码片段 GroovyObject invokeMethod

https://gitee.com/dyyx/mveldemo/blob/master/src/main/java/dyyx/GroovyDemo.java


groovy简介

上一篇     下一篇
Java字节码增强简介

JDK CGLIB Javassist ASM 动态代理 比较

SpringBoot异步任务 @Async

模板引擎velocity实例

freemarker实例

dubbo消费端独立启动不依赖spring