Java和groovy相互调用

比眉伴天荒 2021-06-10 20:42 680阅读 0赞

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. }

发表评论

表情:
评论列表 (有 0 条评论,680人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java Scala 相互调用

    Java语言的重要性自不必说,Scala运行在JVM上,运行时也会翻译成class字节码文件进行执行,所以两种语言本质上是同源的,互相之间的调用在编程时就显得很重要了。 多两