packagecom.boco.efficiency.groovy;importgroovy.lang.Binding;importgroovy.lang.GroovyClassLoader;importgroovy.lang.GroovyObject;importgroovy.lang.GroovyShell;importgroovy.text.SimpleTemplateEngine;importgroovy.text.Template;importgroovy.util.GroovyScriptEngine;importjava.io.File;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;importorg.apache.log4j.Logger;importorg.codehaus.groovy.control.CompilationFailedException;public classgroovyUsage {private static final Logger logger = Logger.getLogger(groovyUsage.class);/** UseClassLoader usage example
* Use groovy UseClassLoader to parse/compile a groovy file and run it
**/
public void UseClassLoader() throwsException {
ClassLoader parent=getClass().getClassLoader();
GroovyClassLoader loader= newGroovyClassLoader(parent);
Class groovyClass= loader.parseClass(new File("D:\\StudyCode\\checkGroovy\\src\\main\\java\\com\\boco\\common\\HelloWorld.groovy"));
GroovyObject groovyObject=(GroovyObject) groovyClass.newInstance();
Object[] args={};
groovyObject.invokeMethod("sayHello", args);
}/** GroovyShell usage example
* Use groovy shell to calculate dynamically
注意其中的groovyShell.evalucate会比较好用
**/
public voidUseGroovyShell() {
Binding binding= newBinding();
binding.setVariable("foo", new Integer(30));
GroovyShell shell= newGroovyShell(binding);
Object value= shell.evaluate("println 'Hello World! I\\'m in shell'; x = 123; return foo * 10");
logger.info("result: " +value);assert value.equals(new Integer(20));
}/** GroovyScriptEngine usage example
* GroovyScriptEngine是实际场景中应用最多的,其构造参数中需要加入urls指明groovy应用路径
**/
public void useGroovyScriptEngine() throwsException {
String[] roots= new String[] { "/StudyCode/checkGroovy/src/main/java/com/boco/common/"};
GroovyScriptEngine gse= newGroovyScriptEngine(roots);
Binding binding= newBinding();
binding.setVariable("input", "world");
gse.run("hello.groovy", binding);
logger.info(binding.getVariable("output"));
}/** Use groovy.Text.Template to gen new String
这在动态生成某些文本文件或script时会有大用处^^
**/
public void useGroovyTextTemplate() throwsException {
File file=new File("D:\\StudyCode\\checkGroovy\\src\\main\\java\\com\\boco\\common\\template.tmpl");
Template tmpl=null;try{
tmpl= newSimpleTemplateEngine().createTemplate(file);
}catch(CompilationFailedException e) {
e.printStackTrace();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
Map binding= newHashMap();
binding.put("id", "101");
binding.put("name", "101");
binding.put("salary", "50000");
String xml=tmpl.make(binding).toString();
logger.info(xml);
}
}