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
分享到:
相关推荐
- **GroovySQL**: 提供了更简便的方式与SQL数据库交互。 - **GroovyBean**: 提供了与Bean相关的简洁语法。 - **Groovy模板引擎**:集成了GPath和字节码编译功能。 - **Ant脚本化**: 可以使用Groovy编写Ant构建脚本。...
**二、Groovy与Java的交互** 1. **类和接口**: Groovy可以创建Java兼容的类和接口,因此可以直接与Java代码一起工作。 2. **Java集合增强**: Groovy提供了对Java集合的增强,如列表和映射可以使用链式调用、闭包...
Java作为企业级应用的首选平台,有时也需要与脚本语言进行交互,以实现动态配置、自动化测试或者快速原型开发等需求。本文将深入探讨如何在Java中调用三种流行的脚本语言:Jython、JRuby和Groovy。 ### Jython ...
Groovy结合了Python、Ruby和Java的优点,提供了简洁的语法、面向对象的特性以及与Java无缝集成的能力。由于其灵活性和高效性,Groovy在构建脚本、Web开发、自动化任务、测试等领域得到了广泛应用。 在提供的压缩包...
Groovy的强大之处在于它结合了Java的成熟生态系统和动态语言的灵活性,使得诸如多线程编程、外部进程调用、模板渲染和Web开发等任务变得异常简单。对于那些希望在保持高性能的同时提高开发效率的开发者来说,Groovy...
- 新的`invokedynamic`指令,为运行时绑定方法调用提供了支持,增强了Java与脚本语言的交互,比如Groovy和JavaScript。 10. **弃用和改进的API** - JDK 7中,一些过时的API被标记为废弃,如`FileInputStream`和`...
- **Scripting API**:引入了JSR 223,支持脚本语言与Java的交互,如JavaScript、Groovy等。 - **NIO.2(New I/O 2)**:增加了对异步I/O的支持,提供FileChannel、Path和Files类,便于文件操作和流处理。 - **...
2. **与 Java 的兼容性**:Groovy 与 Java 完全兼容,这意味着 Grails 可以使用 Java 的所有类库,开发者可以在 Groovy 和 Java 之间轻松切换。 3. **插件生态系统**:Grails 集成了 Maven 等插件管理系统,使得...
Griffon是一款基于Groovy和Java的桌面应用程序框架,它提供了一种简洁的方式来构建GUI应用,同时利用了Java平台的广泛库支持。这篇学习笔记主要关注如何在Griffon应用中展示数据列表。 ### Griffon框架简介 ...
- Activity是Android应用程序的基本组成部分之一,代表用户与应用进行交互的一个屏幕。 - 本例中选择默认的 "Blank Activity"。 - **Activity概念详解**: - **定义**: Activity是Android应用程序中的一个组件,...
《Grails学习笔记:监听器与环境配置》 在Grails框架中,监听器和环境配置是提升开发效率的关键元素。监听器允许开发者在特定事件发生时执行自定义操作,而环境配置则确保了不同环境下应用的正确运行。本文将深入...
在Android开发中,ksoap2是一个非常重要的库,它允许我们与远程Web服务进行交互,尤其是那些基于SOAP(Simple Object Access Protocol)协议的服务。ksoap2-android是一个轻量级的库,专门针对Android平台进行了优化...
GORM(Grails Object-Relational Mapping)是Grails的数据访问层,使得与数据库的交互变得简单高效。 第三篇笔记可能会讨论控制器(Controllers),它们负责处理HTTP请求,调用服务层的方法,并将数据传递给视图层...
创建一个`NoteViewModel`,负责与数据库交互: ```kotlin class NoteViewModel(application: Application) : AndroidViewModel(application) { private val database = AppDatabase.getDatabase(application)....
可以考虑使用 `Long` 类型来存储时间戳,便于与数据库交互。 ```java public class Note { private String title; private String content; private long createdAt; // 构造函数、getters 和 setters } ``` ...
Hibernate简化了数据库访问,减少了与SQL的直接交互,提高了代码的可读性和可维护性。通过配置XML映射文件或使用注解,开发者可以定义对象和数据库表之间的映射关系,并执行CRUD(创建、读取、更新、删除)操作。 ...
Spring框架是Java开发中最常用的开源框架之一,尤其在企业级应用开发中占据着核心地位。这个"Spring_Note.zip"文件很可能包含了一系列关于Spring框架的学习笔记或者教程资料,特别是聚焦于Spring 3版本的知识点。...
9. **动态类型语言支持**:Java 7通过JSR 292(invokedynamic指令)增强了对动态类型语言的支持,使得Java可以更好地与Groovy、JRuby等脚本语言交互。 10. **编码改进**:JDK 7支持更多的字符集,并改进了编码处理...