1. 程式人生 > >Java和groovy相互呼叫

Java和groovy相互呼叫

java interface

Java程式碼  收藏程式碼
  1. package groovy;  
  2. public interface IFoo {  
  3.     public Object run(Object foo, Object bar);  
  4. }  

groovy implements

Java程式碼  收藏程式碼
  1. package groovy;  
  2. class Foo implements IFoo {  
  3.     def x  
  4.     public Object run(Object foo, Object bar) {  
  5.         println 'Hello World!'
      
  6.         x = 123  
  7.         println foo * 10  
  8.         println bar  
  9.         return 'success'  
  10.     }  
  11. }   

java call groovy

Java程式碼  收藏程式碼
  1. package groovy;  
  2. import groovy.lang.GroovyClassLoader;  
  3. import groovy.lang.GroovyObject;  
  4. import java.io.File;  
  5. public class InvokeGroovy {  
  6.     public static
     void main(String[] args) {  
  7.         ClassLoader cl = new InvokeGroovy().getClass().getClassLoader();  
  8.         GroovyClassLoader groovyCl = new GroovyClassLoader(cl);  
  9.         try {  
  10.             @SuppressWarnings("rawtypes")  
  11.             Class groovyClass = groovyCl.parseClass(new File(InvokeGroovy.class
    .getResource("/groovy/Foo.groovy").toURI()));  
  12.             IFoo foo = (IFoo) groovyClass.newInstance();  
  13.             System.out.println(foo.run(new Integer(2), "More parameter..."));  
  14.             System.out.println("=============================");  
  15.             GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();  
  16.             System.out.println(groovyObject.invokeMethod("run"new Object[]{new Integer(2),"More parameter..."}));   
  17.         } catch (Exception e) {  
  18.             e.printStackTrace();  
  19.         }  
  20.     }  
  21. }  

java execute groovy script

Java程式碼  收藏程式碼
  1. package groovy;  
  2. import groovy.lang.Binding;  
  3. import groovy.lang.GroovyShell;  
  4. import javax.script.ScriptEngine;  
  5. import javax.script.ScriptEngineManager;  
  6. import javax.script.ScriptException;  
  7. public class TestEval {  
  8.     public Object doit() {  
  9.         ScriptEngineManager factory = new ScriptEngineManager(TestEval.class.getClassLoader());  
  10.         ScriptEngine scriptEngine =  factory.getEngineByName("groovy");//或者"Groovy" groovy版本要1.6以上的  
  11.         try {  
  12.             scriptEngine.put("test""hello world!");  
  13.             scriptEngine.put("outer"this);  
  14.             scriptEngine.eval("println test; outer.java_out()");  
  15.         } catch (ScriptException e) {  
  16.             // TODO Auto-generated catch block  
  17.             e.printStackTrace();  
  18.         }  
  19.         Binding bb = new Binding();  
  20.         bb.setVariable("test""hello world!");  
  21.         bb.setProperty("outer"this);  
  22.         GroovyShell gs = new GroovyShell(bb);  
  23.         return gs.evaluate("println test; outer.java_out()");  
  24.     }  
  25.     /** 
  26.      * @param args 
  27.      */  
  28.     public static void main(String[] args) {  
  29.         TestEval te = new TestEval();  
  30.         te.doit();  
  31.     }  
  32.     public void java_out(){  
  33.         System.out.println("out from java");  
  34.     }  
  35. }