加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读