groovy与java交互
发布时间:2020-12-14 16:49:42 所属栏目:大数据 来源:网络整理
导读:Groovy脚本有两种调用方式:一是作为普通脚本文件(.groovy),使用Groovy提供的命令行groovy或者通过类groovy.lang.GroovyShell来调用; 二是作为普通的Java类文件(.class),用传统的方式来调用,这需要先使用groovyc把脚本文件编译成类文件,然后再使用jav
Groovy脚本有两种调用方式:一是作为普通脚本文件(.groovy),使用Groovy提供的命令行groovy或者通过类groovy.lang.GroovyShell来调用;
二是作为普通的Java类文件(.class),用传统的方式来调用,这需要先使用groovyc把脚本文件编译成类文件,然后再使用java命令来调用。 在上一篇XXXX中,在eclipse中配置插件,运行的时候是使用第二种方式,因为会有自动编译的文件,如GTest.class, 在bin-groovy目录下。 本篇继续在eclipse中做测试。 groovy的编译后的class在bin-groovy下,在eclipse中构建路径设置输出GroovyJava/bin,java的class会编译到bin下。 先上代码,互相调用的部分都已经写好了。 有一个java 类和一个接口: package com.kevin; public interface IPerson { public void say(String name); } package com.kevin; import groovy.lang.GroovyClassLoader; import java.io.File; import java.io.IOException; import org.codehaus.groovy.control.CompilationFailedException; public class Person { private String name; private int age; public Person() { } public Person(String name,int age) { this.age = age; this.name = name; } /** * 此方法会在groovy中调用 */ public void sayHello() { System.out.println("hello,my name is: " + name + ",and age is:" + age); } /** * 调用groovy中的方法 */ private void foo() { try { ClassLoader cl = getClass().getClassLoader(); GroovyClassLoader groovyCl = new GroovyClassLoader(cl); Class groovyClass = groovyCl.parseClass(new File("src/GPerson.groovy")); IPerson p = (IPerson) groovyClass.newInstance(); p.say("LUCY");//调用GPerson.groovy实现接口IPerson的方法 } catch (CompilationFailedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } public static void main(String[] args) { Person p = new Person(); p.foo(); } } 接下来是GPerson.groovy /** * @author Kevin * */ import com.kevin.IPerson; import com.kevin.Person; public class GPerson implements IPerson{ //接口IPerson的具体实现,此方法会在java中调用 public void say(String name){ println "Hello,$name! "; } def foo(){ Person p = new Person("TOM",45); p.sayHello(); } static void main(args) { GPerson gp = new GPerson(); //gp.say("JACK"); gp.foo(); } }在groovy中使用java: 在GPerson.groovy运行主方法,new了一个Person.java的实例,并调用了其中的sayHello()方法。 输出是: hello,my name is: TOM,and age is:45 在java中调用groovy: 在Person.java 中运行main方法,在foo()中通过GroovyClassLoader获得GPerson的实例,并调用其中的say()方法。 输出是: Hello,LUCY! 当然也可以在groovy中使用现成的java类,比如spring的jar包。 把jar包丢进来,在classpath中包括进来, 用到的时候在头部来一句: import org.springframework.util.StringUtils; 跟在java中导入一样。 结束。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |