执行Groovy脚本的工具类
发布时间:2020-12-14 16:43:19 所属栏目:大数据 来源:网络整理
导读:groovy? import java.io.File;import java.net.URL;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import groovy.lang.GroovyClassLoader;import groovy.lang.GroovyCodeSource;import groovy.lang.Script;@SuppressWarnings({ "rawt
|
groovy? import java.io.File;
import java.net.URL;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyCodeSource;
import groovy.lang.Script;
@SuppressWarnings({ "rawtypes","unchecked" })
public class GroovyCompiler {
private static Map<String,GroovyClass> groovyCaches = new ConcurrentHashMap<String,GroovyClass>();
private static ClassLoader cl = GroovyCompiler.class.getClassLoader();
private static GroovyClassLoader groovyCl = new GroovyClassLoader(cl);
public static GroovyClass getClass(File script){
if(script == null || !script.exists()){
return null;
}
try {
String fileName = script.getPath() ;
GroovyClass groovyClazz = groovyCaches.get(fileName);
//cached,check if modified
if(groovyClazz != null){
long lastModified = script.lastModified();
//newest
if(lastModified <= groovyClazz.getLastmodified() ){
return groovyClazz;
}
//update cache
groovyClazz = null;
}
//need new a Instance
//not use GroovyClassLoader cache
Class<?> groovyClass = groovyCl.parseClass(new GroovyCodeSource(script,"UTF-8"),false);
groovyClazz = new GroovyClass((Script)groovyClass.newInstance(),script.lastModified());
groovyCaches.put(fileName,groovyClazz);
return groovyClazz;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static GroovyClass getClass(URL script){
return getClass(new File(script.getFile()));
}
public static GroovyClass getClass(String script){
return getClass(cl.getResource(script));
}
public static class GroovyClass {
public GroovyClass(){
}
public GroovyClass(Script script,long lastmodified){
this.script = script;
this.lastmodified = lastmodified;
}
Script script;
long lastmodified = 0;
public Script getScript() {
return script;
}
public void setScript(Script script) {
this.script = script;
}
public long getLastmodified() {
return lastmodified;
}
public void setLastmodified(long lastmodified) {
this.lastmodified = lastmodified;
}
public Object invoke(String methosName,Object[] args) {
return script.invokeMethod(methosName,args);
}
public Object get() {
return script.run();
}
public Object get(Map binds) {
script.getBinding().getVariables().putAll(binds);
Object obj = script.run();
return obj;
}
}
}
使用 public class GroovyKest {
public static void main(String[] args) throws Exception {
GroovyClass groovy = GroovyCompiler.getClass("script/view.groovy");
Map <String,String> context = new HashMap<>();
context.put("name","kan");
Object obj = groovy.get(context);
System.out.println(obj);
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
