groovy执行java代码字符串
groovy执行java代码字符串
在使用xxl-job的时候发现有一个glue模式可以直接运行java代码字符串,感到好奇,看了下源码发现使用的是groovy工具类实现的。这里记录一下。
依赖
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>2.5.3</version>
</dependency>
代码
定义一个接口:
package com.util.javacode;
public interface IGroovyHandler {
void handle(String obj);
}
测试代码:
package com.util.javacode;
import groovy.lang.GroovyClassLoader;
/**
* 参考自 xxl-job 的 glue 模式
* com.xxl.job.core.glue
* @author bart
*
*/
public class TestsGroovy {
public static void main(String[] args) throws Exception{
test_01();
}
/**
* 注意package必须存在!否则报错!!!
* @throws Exception
*/
private static void test_01() throws Exception{
String codeSource = "package com.util.javacode;\r\n" +
"public class DemoHandler implements IGroovyHandler {\r\n" +
" @Override\r\n" +
" public void handle(String obj) {\r\n" +
" System.out.println(\"############### \"+ obj);\r\n" +
" }\r\n" +
"}";
GroovyClassLoader groovyClassLoader = new GroovyClassLoader();
Class<?> clazz = groovyClassLoader.parseClass(codeSource);
if (clazz != null) {
Object instance = clazz.newInstance();
if (instance!=null) {
if (instance instanceof IGroovyHandler) {
IGroovyHandler handler = (IGroovyHandler) instance;
handler.handle("天气不错!");
} else {
System.err.println("转换失败!");
}
}
}
}
}
输出:
############### 天气不错!