Java中使用Groovy脚本

一、Groovy简介

Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。

二、Java中Groovy的应用场景

由于Groovy兼容Java类库,因此用户可以编写Groovy脚本,执行一些自定义的任务,然后使用Groovy脚本组件去执行这段脚本即可。

三、使用示例

3.1 在maven中引入groovy所需依赖

	
	
	    org.codehaus.groovy
	    groovy-all
	    2.4.15
	

3.2 一个运行groovy脚本的工具类

package org.lin.hello.groovy;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;

import org.codehaus.groovy.runtime.InvokerHelper;

import groovy.lang.Binding;
import groovy.lang.GroovyClassLoader;
import groovy.lang.Script;

/**
 * Groovy脚本工具类 
* 尝试缓存groovy脚本执行类 * @author ljf * */ public class GroovyUtil { /** 上下文环境 */ private static final Map context = new HashMap(); private static GroovyClassLoader gcl = new GroovyClassLoader(); /** groovy生成的类缓存 */ private static Map> classPool = new ConcurrentHashMap>(); /** * 绑定环境变量 */ public static void bind(String key, Object value) { context.put(key, value); } public static void unBind(String key) { context.remove(key); } /** * 执行groovy脚本 */ public static void runScript(String scriptStr) { Binding binding = bindVariables(); String className = genClassName(scriptStr); Class clazz = classPool.get(className); if (clazz == null) { clazz = gcl.parseClass(scriptStr, className); classPool.put(className, clazz); } Script script = InvokerHelper.createScript(clazz, binding); script.run(); } private static String genClassName(String scriptStr) { return String.valueOf(scriptStr.hashCode()); } private static Binding bindVariables() { Binding binding = new Binding(); for (Entry entry : context.entrySet()) { binding.setVariable(entry.getKey(), entry.getValue()); } return binding; } public static void main(String[] args) { GroovyUtil.bind("name", "jack"); GroovyUtil.bind("company", "otaku"); GroovyUtil.runScript("System.out.println(\"My name is \" + name + \"," + " and my company is \" + company);"); } }

 

你可能感兴趣的:(groovy)