groovy实例
所属分类 groovy
浏览量 957
动态编译
实例化 转换成指定接口
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