JavaでGroovyスクリプトを使用する
2602 ワード
一、Groovyの紹介
GroovyはJVM(Java仮想マシン)ベースの敏捷な開発言語で、Python、Ruby、Smalltalkの多くの強力な特性を結合し、GroovyコードはJavaコードとよく結合し、既存のコードを拡張するためにも使用できます.JVM上で実行される機能のため、Groovyは他のJava言語で作成されたライブラリを使用できます.
二、JavaにおけるGroovyの応用シーン
GroovyはJavaクラスライブラリと互換性があるため、ユーザーはGroovyスクリプトを作成し、カスタムタスクを実行し、Groovyスクリプトコンポーネントを使用してこのスクリプトを実行することができます.
三、使用例
3.1 mavenにgroovyを導入するために必要な依存
3.2 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);");
}
}