在使用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("转换失败!");
				}
			}
			}
	}
}
输出:
############### 天气不错!
原文:https://www.cnblogs.com/bartggg/p/14840943.html