groovy笔记之二:groovy与java交互

xiaoxiao2024-10-31  96

Groovy脚本有两种调用方式:一是作为普通脚本文件(.groovy),使用Groovy提供的命令行groovy或者通过类groovy.lang.GroovyShell来调用; 二是作为普通的Java类文件(.class),用传统的方式来调用,这需要先使用groovyc把脚本文件编译成类文件,然后再使用java命令来调用。 在上一篇XXXX中,在eclipse中配置插件,运行的时候是使用第二种方式,因为会有自动编译的文件,如GTest.class, 在bin-groovy目录下。 本篇继续在eclipse中做测试。 目录结构: [img]/upload/attachment/92139/d0eeba97-742e-354c-8972-9d42a4893676.jpg[/img] 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中导入一样。 结束。 相关资源:敏捷开发V1.0.pptx
转载请注明原文地址: https://www.6miu.com/read-5018871.html

最新回复(0)