`
luoshi0801
  • 浏览: 147278 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

groovy和java结合的常用两种使用方式

 
阅读更多

groovy是基于JVM的一种敏捷动态语言,可以在不改动正在运行着程序的情况下为系统动态增加特性

 

方法一:通过类加载

 

import groovy.lang.Binding;
import groovy.lang.GroovyClassLoader;
import groovy.lang.Script;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.List;

import org.codehaus.groovy.runtime.InvokerHelper;

import com.google.common.collect.Maps;

public class GroovyTest {
	
	static class MyBinding extends Binding {
		
		private HashMap<String, Object> variables = Maps.newHashMap();

		public void setVariable(String name, Object binding) {
			variables.put(name, binding);
		}
		
		public Object getVariable(String name) {
	        return variables.get(name);
	    }
	}
	
	public static void main(String[] args) {
		String log = "Hi, test one, split with comma";
		
		GroovyClassLoader classLoader = new GroovyClassLoader ();
		Class<?> scriptClass = classLoader.parseClass(getGroovyString());
		Script script = InvokerHelper.createScript(scriptClass, new MyBinding());
		List<String> ret = (List<String>)script.invokeMethod("parse", new Object[]{log});
		
		System.out.println(ret);
	}
	
	private static String getGroovyString() {
		StringBuilder ret = new StringBuilder();
		BufferedReader reader = new BufferedReader(new InputStreamReader(GroovyTest.class.getClassLoader()
				.getResourceAsStream("GroovyScript")));
		String line;
		try {
			while ((line = reader.readLine()) != null) {
				ret.append(line).append("\n");
			}
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
		return ret.toString();
	}
	
}

 测试结果为:

 其中文本文件GroovyScript为

import org.apache.commons.lang.StringUtils;

List<String> parse(String log) {
    List<String> ret = new ArrayList<String>();
    for (field in StringUtils.split(log, ",")) {
        ret.add(field);
    }
    return ret;
}

 

 

方法二:通过evaluate

        @Test
	public void test() {
		Binding binding = new Binding();
		binding.setVariable("$name", "zhiyuan");
		binding.setVariable("$age", 28);
		binding.setVariable("$salary", 1000);
		GroovyShell shell = new GroovyShell(binding);
		
		String groovyExp = "return ($name.contains('hiy')  && $age > 27) || $salary <= 1000";
		Boolean val = (Boolean)shell.evaluate(groovyExp);
		if (val) {
			System.out.println(groovyExp);
		}
	}

 

  • 大小: 12.8 KB
分享到:
评论

相关推荐

    Grails&Groovy学习资料

    Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,提供了丰富的功能,而Groovy则是一种面向Java平台的动态编程语言,它的设计目标是提高开发者的生产力。 Groovy语言: Groovy是Java平台上的一个...

    groovy-binary-1.8.9.zip

    Groovy是一种动态、灵活的编程语言,它是在Java虚拟机(JVM)上运行的,因此与Java语言有着紧密的联系。Groovy的设计目标是为了提高开发者的生产力,它提供了简洁的语法,支持元编程和面向切面编程,使得编写代码...

    java开源包7

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包8

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    常见的十五种Java开发工具

    本文将介绍十五种常用的Java开发工具及其简单的工作环境概述。 #### 1. JDK (Java Development Kit) JDK是Java的核心工具集,包含了编译器、解释器、调试器等必要的工具,是所有Java开发者的基础。JDK支持三种主要...

    lang-groovy-2.0.0-final.zip

    Groovy,一种强大的、动态类型的JVM语言,以其简洁的语法和对Java的无缝集成,深受广大开发者喜爱。而Lucene-Sugar,则是在流行的全文搜索引擎库Apache Lucene基础上,增添了一些甜美的“糖分”,使得操作变得更加...

    java开源包6

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包4

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包9

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包101

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包5

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    Java EE 7 Recipes

    - 本章将介绍如何使用这两种技术来构建实时通信的应用程序。 ##### 18. **JavaFX in the Enterprise** - **JavaFX** 是一个用于构建桌面和移动应用的平台。 - 本章将探讨如何使用JavaFX构建企业级用户界面,并将其...

    java开源包10

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包3

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包1

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    Java资源包01

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

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

    2个目标文件 摘要:Java源码,网络相关,UDP 基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式...

    java开源包2

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java开源包11

    parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG(解析表达式语法)分析设施。你定义的Java源代码的语法规则,直接,没有必要专门编写和维护,外部语法文件。同时保持蒸提供全面的支持,...

    java工程文件

    目前主流的构建工具有Maven和Gradle两种。 - **Maven**:以约定优于配置的原则,提供了一套标准的生命周期,便于管理项目构建过程中的依赖关系。 - **Gradle**:基于Groovy语言编写,提供更灵活的配置方式,并且...

Global site tag (gtag.js) - Google Analytics