`
kevincollins
  • 浏览: 57237 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

groovy笔记之二:groovy与java交互

阅读更多
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中导入一样。

结束。


  • 大小: 22.7 KB
1
0
分享到:
评论

相关推荐

    Groovy学习笔记

    - **GroovySQL**: 提供了更简便的方式与SQL数据库交互。 - **GroovyBean**: 提供了与Bean相关的简洁语法。 - **Groovy模板引擎**:集成了GPath和字节码编译功能。 - **Ant脚本化**: 可以使用Groovy编写Ant构建脚本。...

    Groovy 学习笔记

    **二、Groovy与Java的交互** 1. **类和接口**: Groovy可以创建Java兼容的类和接口,因此可以直接与Java代码一起工作。 2. **Java集合增强**: Groovy提供了对Java集合的增强,如列表和映射可以使用链式调用、闭包...

    java调用脚本语言笔记(jython,jruby,groovy)

    Java作为企业级应用的首选平台,有时也需要与脚本语言进行交互,以实现动态配置、自动化测试或者快速原型开发等需求。本文将深入探讨如何在Java中调用三种流行的脚本语言:Jython、JRuby和Groovy。 ### Jython ...

    Groovy-chenyun2000-mht.rar

    Groovy结合了Python、Ruby和Java的优点,提供了简洁的语法、面向对象的特性以及与Java无缝集成的能力。由于其灵活性和高效性,Groovy在构建脚本、Web开发、自动化任务、测试等领域得到了广泛应用。 在提供的压缩包...

    Groovy_笔记

    Groovy的强大之处在于它结合了Java的成熟生态系统和动态语言的灵活性,使得诸如多线程编程、外部进程调用、模板渲染和Web开发等任务变得异常简单。对于那些希望在保持高性能的同时提高开发效率的开发者来说,Groovy...

    Java JDK 7学习笔记 完整扫描版

    - 新的`invokedynamic`指令,为运行时绑定方法调用提供了支持,增强了Java与脚本语言的交互,比如Groovy和JavaScript。 10. **弃用和改进的API** - JDK 7中,一些过时的API被标记为废弃,如`FileInputStream`和`...

    Java JDK 6学习笔记——ppt简体版

    - **Scripting API**:引入了JSR 223,支持脚本语言与Java的交互,如JavaScript、Groovy等。 - **NIO.2(New I/O 2)**:增加了对异步I/O的支持,提供FileChannel、Path和Files类,便于文件操作和流处理。 - **...

    grails开发笔记

    2. **与 Java 的兼容性**:Groovy 与 Java 完全兼容,这意味着 Grails 可以使用 Java 的所有类库,开发者可以在 Groovy 和 Java 之间轻松切换。 3. **插件生态系统**:Grails 集成了 Maven 等插件管理系统,使得...

    Griffon学习笔记2 - 显示数据列表

    Griffon是一款基于Groovy和Java的桌面应用程序框架,它提供了一种简洁的方式来构建GUI应用,同时利用了Java平台的广泛库支持。这篇学习笔记主要关注如何在Griffon应用中展示数据列表。 ### Griffon框架简介 ...

    Android Studio v0.8.14试用笔记

    - Activity是Android应用程序的基本组成部分之一,代表用户与应用进行交互的一个屏幕。 - 本例中选择默认的 "Blank Activity"。 - **Activity概念详解**: - **定义**: Activity是Android应用程序中的一个组件,...

    grails学习笔记

    《Grails学习笔记:监听器与环境配置》 在Grails框架中,监听器和环境配置是提升开发效率的关键元素。监听器允许开发者在特定事件发生时执行自定义操作,而环境配置则确保了不同环境下应用的正确运行。本文将深入...

    android ksoap 代码共享

    在Android开发中,ksoap2是一个非常重要的库,它允许我们与远程Web服务进行交互,尤其是那些基于SOAP(Simple Object Access Protocol)协议的服务。ksoap2-android是一个轻量级的库,专门针对Android平台进行了优化...

    The definitive Guide To Grails学习笔记

    GORM(Grails Object-Relational Mapping)是Grails的数据访问层,使得与数据库的交互变得简单高效。 第三篇笔记可能会讨论控制器(Controllers),它们负责处理HTTP请求,调用服务层的方法,并将数据传递给视图层...

    利用sqlite实现最简单的android记事本

    创建一个`NoteViewModel`,负责与数据库交互: ```kotlin class NoteViewModel(application: Application) : AndroidViewModel(application) { private val database = AppDatabase.getDatabase(application)....

    Note android

    可以考虑使用 `Long` 类型来存储时间戳,便于与数据库交互。 ```java public class Note { private String title; private String content; private long createdAt; // 构造函数、getters 和 setters } ``` ...

    java上传 hibernate jmeter

    Hibernate简化了数据库访问,减少了与SQL的直接交互,提高了代码的可读性和可维护性。通过配置XML映射文件或使用注解,开发者可以定义对象和数据库表之间的映射关系,并执行CRUD(创建、读取、更新、删除)操作。 ...

    Spring_Note.zip

    Spring框架是Java开发中最常用的开源框架之一,尤其在企业级应用开发中占据着核心地位。这个"Spring_Note.zip"文件很可能包含了一系列关于Spring框架的学习笔记或者教程资料,特别是聚焦于Spring 3版本的知识点。...

    jdk-7-sr:JDK 7源码阅读笔记

    9. **动态类型语言支持**:Java 7通过JSR 292(invokedynamic指令)增强了对动态类型语言的支持,使得Java可以更好地与Groovy、JRuby等脚本语言交互。 10. **编码改进**:JDK 7支持更多的字符集,并改进了编码处理...

Global site tag (gtag.js) - Google Analytics