groovy笔记之二:groovy与java交互

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中导入一样。

结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值