`
daimojingdeyu
  • 浏览: 274923 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

Java和groovy相互调用

 
阅读更多

java interface

package groovy;

public interface IFoo {
    public Object run(Object foo, Object bar);
}

 

groovy implements

package groovy;
class Foo implements IFoo {
	def x
	public Object run(Object foo, Object bar) {
		println 'Hello World!'
		x = 123
		println foo * 10
		println bar
		return 'success'
	}
} 

 

java call groovy

package groovy;

import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;

import java.io.File;

public class InvokeGroovy {
    public static void main(String[] args) {
        ClassLoader cl = new InvokeGroovy().getClass().getClassLoader();
        GroovyClassLoader groovyCl = new GroovyClassLoader(cl);
        try {
            @SuppressWarnings("rawtypes")
            Class groovyClass = groovyCl.parseClass(new File(InvokeGroovy.class.getResource("/groovy/Foo.groovy").toURI()));
            IFoo foo = (IFoo) groovyClass.newInstance();
            System.out.println(foo.run(new Integer(2), "More parameter..."));
            
            System.out.println("=============================");
            
            GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
            System.out.println(groovyObject.invokeMethod("run", new Object[]{new Integer(2),"More parameter..."})); 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

java execute groovy script

package groovy;

import groovy.lang.Binding;
import groovy.lang.GroovyShell;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class TestEval {

    public Object doit() {
        ScriptEngineManager factory = new ScriptEngineManager(TestEval.class.getClassLoader());
        ScriptEngine scriptEngine =  factory.getEngineByName("groovy");//或者"Groovy" groovy版本要1.6以上的
        try {
            scriptEngine.put("test", "hello world!");
            scriptEngine.put("outer", this);
            scriptEngine.eval("println test; outer.java_out()");
        } catch (ScriptException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        Binding bb = new Binding();
        bb.setVariable("test", "hello world!");
        bb.setProperty("outer", this);
        GroovyShell gs = new GroovyShell(bb);
        
        
        return gs.evaluate("println test; outer.java_out()");
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        TestEval te = new TestEval();
        te.doit();
        
    }
    
    public void java_out(){
        System.out.println("out from java");
    }

}
分享到:
评论

相关推荐

    groovy和Java相互调用1

    标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...

    java与groovy互相调用1

    在Java和Groovy这两种语言中,互相调用代码是相当便捷的,因为它们可以无缝集成。Groovy是一种基于Java平台的脚本语言,它与Java有很高的互操作性,这使得开发者可以在同一个项目中混合使用Java和Groovy,充分利用...

    SpringBoot-Gradle-Maven-Java-Groovy

    SpringBoot、Gradle、Maven、Java和Groovy是Java生态系统中的重要组成部分,它们在现代软件开发中扮演着至关重要的角色。这篇详细的知识点解析将深入探讨这些技术及其相互关系。 1. **SpringBoot**: SpringBoot是...

    Java Groovy

    - **代码互操作性**:Groovy和Java之间可以直接相互调用方法和构造器,这种无缝的互操作性为项目带来了极大的灵活性。 - **迁移路径**:对于希望逐步迁移到Groovy的项目,可以从引入简单的Groovy脚本开始,逐渐扩大...

    Android java和C互相调用.docx

    本文将详细介绍如何在Android项目中实现Java与C的互相调用,并涉及CMakeLists.txt文件的配置。 首先,CMakeLists.txt是CMake构建工具的配置文件,用于管理C/C++项目。在Android Studio中,当涉及到原生代码时,我们...

    Android Studio3.0开发JNI流程------C++调用Java以及Java调用C++,C++/Java互相调用

    在Android应用开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。JNI在Android系统中扮演着重要的角色,特别是在需要高效计算或者利用硬件特性时,如游戏开发、图像处理和...

    groovy-官网翻译.docx

    为了推广学习groovy,低分提供给大家!  运行在Java虚拟机上,敏捷、动态的语言  建立在Java的基础上,同时,吸收了其他语言的优点,比如:... 与Java无缝集成,互相调用  与Java一样,一次编写,随处运行

    Grovvy 书籍

    8. **集成到Java项目中**:了解如何在现有的Java项目中引入Groovy,以及如何让Java和Groovy代码相互调用。 9. **iText库的使用**:学习iText库的基本用法,如创建PDF文档、添加文本、图像、表格,以及如何进行签名...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java汉字与拼音的转换

    2. **基本使用**:导入必要的类并初始化`PinyinHelper`,然后调用`toHanyuPinyinStringArray()`方法进行转换。例如,转换汉字“你好”: ```java import net.sourceforge.pinyin4j.PinyinHelper; public class ...

    Java vert.x微服务框架资料

    - **多语言环境:** Vert.x 支持多种语言,包括 Java、Groovy、Ruby、Scala、JavaScript 等,这使得开发者可以根据项目需求选择最适合的语言进行开发。 **2.5 数据库集成** - **数据访问:** Vert.x 提供了对多种...

    android调用webservice 的对象序列化代码

    在Android开发中,调用Web服务是常见的任务之一,尤其是使用WebService进行数据交换。Web服务通常采用SOAP(Simple Object Access Protocol)或RESTful API的形式,其中SOAP常常涉及到对象的序列化和反序列化。对象...

    利用soapui和jdk API访问webservice

    总结起来,通过SoapUI,你可以直观地测试和调试Web服务,而通过JDK API,你可以将Web服务集成到Java应用程序中,实现自动化调用和更复杂的逻辑。两者结合使用,可以全面了解和管理Web服务的生命周期。

    java架构图示

    根据给定的信息,本文将对Java相关的架构图进行详细的解读与分析,主要涵盖Spring、Hibernate、Struts(包括Struts1和Struts2)、JSF、Seam、Grails、DWR、J2EE、Oracle等技术栈的核心概念及其架构特点。 ### 1. ...

    webview使用demo

    本教程将详细介绍如何在Android中使用WebView,并实现JS与Java对象的相互调用。 一、WebView的基本使用 1. 添加依赖 首先,确保在`build.gradle`文件中添加了对WebView的支持库。在`dependencies`块中加入以下代码...

    grandle使用指南

    - **多项目 Java 构建**:讲解如何管理和构建多个相互依赖的 Java 项目。 - **依赖管理基础**: - **什么是依赖管理**:解释依赖管理的概念及其重要性。 - **声明依赖**:展示如何在构建脚本中声明依赖项。 - **...

    ndk编译并与android相互传值

    JNI (Java Native Interface) 是Java平台的一个标准接口,它允许Java代码和其他语言写的代码进行交互。在本主题中,我们将深入探讨如何使用NDK进行编译以及通过JNI在Android与C/C++之间传递值。 首先,让我们理解...

    gradle user

    **Gradle** 是一种基于 Java 的项目自动化构建工具,采用 Groovy 或 Kotlin DSL(领域特定语言)来编写构建脚本,支持增量编译和依赖管理,是目前 Java 项目中最流行的构建工具之一。 ##### 特点: - **灵活性**:...

    bdxjug2015:BordeauxJUG 演讲,2015 年 5 月

    3. **集成Java**:Groovy可以直接调用Java代码,与Java项目无缝集成。 4. **闭包**:Groovy的闭包(Closure)是其强大的功能之一,常用于函数式编程和事件处理。 综上所述,这场2015年BordeauxJUG的演讲很可能深入...

    eventbus.zip

    在 Android 应用程序中,我们常常会遇到各个组件(如 Activity、Fragment)之间需要相互传递消息的情况。传统的做法是通过接口回调或者静态方法来实现,但这样的方式会逐渐导致代码结构复杂,难以维护。EventBus ...

Global site tag (gtag.js) - Google Analytics