java 传参给groovy_groovy笔记之二:groovy与java交互

本文介绍了如何在Java中调用Groovy脚本以及Groovy调用Java类的方法,通过一个具体的例子展示了双方交互的过程。在Java中,使用GroovyClassLoader加载并执行Groovy脚本,而在Groovy中可以直接实例化Java类并调用其方法。此外,还提及了Groovy中导入Java库的方式。
摘要由CSDN通过智能技术生成

Groovy脚本有两种调用方式:一是作为普通脚本文件(.groovy),使用Groovy提供的命令行groovy或者通过类groovy.lang.GroovyShell来调用;

二是作为普通的Java类文件(.class),用传统的方式来调用,这需要先使用groovyc把脚本文件编译成类文件,然后再使用java命令来调用。

在上一篇XXXX中,在eclipse中配置插件,运行的时候是使用第二种方式,因为会有自动编译的文件,如GTest.class, 在bin-groovy目录下。

本篇继续在eclipse中做测试。

目录结构:

d0eeba97-742e-354c-8972-9d42a4893676.jpg

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

结束。

JavaEye推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值