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("转换失败!");
				}
			}
			}
	}
}

输出:

############### 天气不错!

参考

xxl-job的glue模式

posted @ 2021-06-02 13:39  bartggg  阅读(742)  评论(0编辑  收藏  举报