`
aijnecJay
  • 浏览: 58360 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Groovy让JAVA更美好

阅读更多
Groovy 作为一种基于JVM 的敏捷开发语言, 在很多领域已经名声鹊起, 对于很多有经验的程序员来说都不会陌生。今天在这里把Groovy的一些基础和有趣之处介绍给大家。

  首先,Groovy的诞生告诉了大家,JVM上并不是只能跑JAVA一种语言编写的东西,因为Groovy做到了,并且Groovy能和JAVA很好地结合使用,包括与Spring的集成,创造出1+1〉2的效应。

  然后,接触过Groovy的人就会发现,由于能直接使用JAVA的类库,使得Groovy的使用变得极其简单,并且在学习了Groovy的语法以后,很多人会被那些极简而又朴素优美的语法和代码语句完全吸引住。

  Groovy既是一种面向对象的语言,又可以纯粹作为脚本语言,因此在Groovy的语法上,能看到很多Ruby以及Python的影子,这点弥补了JAVA在这方面的劣势。而作为有JAVA基础的程序员,Groovy的学习成本几乎为零。

  Groovy标志性的特点就是动态,以及其简便强大的闭包,还有对文件处理的精简。

  众所周知,JAVA在定义变量的时候就必须决定它的类型,而作为动态语言的Groovy,在为变量赋值的时候,才决定这个对象的类型,动态的好处就是灵活。当然这只是Groovy的冰山一角,很多时候,Groovy还作为对JAVA在脚本语言方面的补充而被使用。

  有时候,当我们需要把一些含有编译期不可知、只有在运行期才能获得参数的公式、规则在编译期进行处理的时候,我们就会发现我们需要依赖脚本语言,当然我们也可以让JAVA直接去跑JAVA Script,但是当你看到Groovy强大的语法的时候,你就会明白你有更好的选择。
  我们来看一个例子

 class Human{

 void help(){
    println("human help")
   }
}

class Animal{
   void help(){
     println("animal help")
   }
}


def takeHelp(helper){
   helper.help()
}
//Human a = new Human()
//a.help()
takeHelp(new Human())
takeHelp(new Animal())


我们可以看到执行结果为
human help
animal help


这就是Groovy对于动态性体现的一个经典例子:可以看到在takeHelp(helper)这个方法里,完全没有指定参数的类型,我们看到只要传入的对象有help()方法即能被正确执行,如果你已用惯了JAVA需要继承一个统一父类这样的语法,一定能体会Groovy的优势了。

  再让我们来看一个Groovy闭包的例子

def closureTst = {
 para1,para2,closure -> 
 println("hello! $para2 & $para1");
 closure.call();
}

Closure clo1 = closureTst(1,2,{println("hello")});


  执行的结果为

hello! 2 & 1
hello



这个例子中我们看到,Groovy用{ }来定义一个闭包,使用->的把变量和方法联系起来。并且我们可以看到,我们在执行closureTst方法的时候,第三个参数本身也是一个闭包块,能被call()方法执行。可以看出Groovy的闭包比JAVA的匿名内部类简练多了。

  Groovy有趣的特性还是相当多的,包括像

 String str ='''Hello 
World!
'''

println(str);
 

Hello
World

用三个引号的形式直接来支持String的跨行,在JAVA中让人厌恶的+号终于可以再见了。

  接下来我们说说在JAVA中使用Groovy的几种方法。
其实在JAVA里使用Groovy的方法非常多,这里就举几个最常用的例子。

  例如我们写了一个Groovy的文件EmailGroovy.groovy,在JAVA的类中,我们可以这样用:
package cn.newtouch.rdc.test.groovy;

import groovy.lang.GroovyShell;

import java.io.File;


public class GroovyTest {

	public static void main(String args[]) throws Exception{
	    ClassLoader parent = GroovyTest.class.getClassLoader();  
	       
	    File file = new File("EmailGroovy.groovy");    
      
        GroovyShell gs = new GroovyShell(parent);
     
        Object r =  gs.evaluate(file);
        System.out.println(r);
  
	}
}

我们可以通过文件的形式把Groovy文件读进来执行,也可以直接通过字符串读进来, 可以通过GroovyShell 、evaluate来执行整个groovy文件,也可以通过像

ClassLoader parent = GroovyTest.class.getClassLoader();    
  GroovyClassLoader loader = new GroovyClassLoader(parent);  
	  
  Class<?> groovyClass = loader.parseClass(file);  
  GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
groovyObject.invokeMethod();

这样的写法来明确地执行需要的方法。

说到这里,我们不妨来看下这个EmailGroovy.groovy的内容。
def emails = new XmlParser().parse("emails.xml");

emails.email.each{

  println"${it.@id} ${it.subject.text()}";
  
  }
这段代码是用来解析一个XML的,emails.xml这个XMl的内容为
<emails>

  <email id='1'>

  <subject>hello world</subject>

  <sender>test@163.com</sender>

  <receivedDate>2010-11-01 10:10:30</receivedDate>

  </email>

  <email id='2'>

  <subject>hello world demo 2</subject>

  <sender>test@2163.com</sender>

  <receivedDate>2010-11-02 10:10:30</receivedDate>

  </email>

  <email id='3'>

  <subject>hello world demo 3</subject>

  <sender>test3@163.com</sender>

  <receivedDate>2010-11-03 10:10:30</receivedDate>

  </email>

  </emails>


我们可以跑一下,结果为

1 hello world
2 hello world demo 2
3 hello world demo 3

短短的三行代码就解决了XML的解析。
这让用DOM4J和JDOM的同学情何以堪阿!

再者,在业界普遍使用Spring的今天,Groovy与Spring的集成也是非常的方便,我们可以使用类似像
<lang:groovy id="groovyTst"
script-source="classpath: EmailGroovy.groovy"
refresh-check-delay="10000">
</lang:groovy>
直接把Groovy文件编译出的JAVA字节码通过Spring的IOC容器来管理,就像使用普通的JAVA BEAN一样简单,并且通过refresh-check-delay参数,你可以动态地去在运行期去读取groovy文件的变化,而无需重启应用。

   由于篇幅有限,本文对Groovy的介绍就到此为止,希望对想要了解动态语言的同学有帮助。
分享到:
评论

相关推荐

    groovy和Java相互调用1

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

    Java中使用Groovy的三种方式

    在Java开发中,Groovy是一种强大的、动态类型的脚本语言,它可以无缝地与Java代码集成,为开发者提供了更简洁、灵活的语法。本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。...

    Groovy+Java混合使用例子

    Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx

    Java调用Groovy,实时动态加载数据库groovy脚本

    在IT行业中,尤其是在软件开发领域,灵活性和动态性是至关重要的。Java作为一种广泛使用的静态类型编程语言...通过结合Java的稳定性和Groovy的动态性,我们可以构建出更适应变化的系统,提升开发效率和系统的可维护性。

    [Groovy] Making Java Groovy 英文版

    ☆ 资源说明:☆ [Manning Publications] Making ...Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing [更多]

    精通 Groovy--下一代开发语言

    什么是 Groovy? Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java ...Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。(有时候会少很多!)

    java 动态脚本语言 精通 Groovy

    1. **Groovy的简洁语法**:Groovy的语法比Java更加简洁,比如它允许省略括号、类型声明等,这使得代码更易读写。例如,方法调用可以不带括号,变量声明可以省略类型,如: ```groovy def sayHello() { println '...

    SpringBoot-Gradle-Maven-Java-Groovy

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

    groovy调用java-se类库学习案例 Java学习资料

    Groovy是一种基于JVM的动态编程语言,它与Java有着紧密的联系,可以直接调用Java的类库。Groovy的设计目标是提供一个简洁、灵活且强大的语法,使得开发者能够更高效地编写脚本和应用程序。在Java学习的过程中,了解...

    hugo110-java_run_groovy-master_java_

    - **简洁的语法**:Groovy语法比Java更简洁,例如,它允许省略分号和大括号,使得代码更易读。 - **闭包**:Groovy的闭包(类似函数引用)是其强大功能之一,常用于函数式编程和回调。 3. **集成Groovy到Java项目...

    Java Groovy

    ### Java与Groovy:融合的力量 #### 知识点一:Java与Groovy的关系 - **定义**:Groovy是一种面向对象的编程语言,它直接运行在Java平台上,并且能够与现有的Java代码无缝集成。 - **特点**: - **语法简洁**:...

    groovy与java的区别1

    总结起来,Groovy与Java的主要区别在于其更灵活的语法、丰富的内置功能(如闭包和元编程)、以及对脚本编写的支持。这些特性使Groovy在快速原型开发、脚本编写以及需要高度动态性的场合中成为理想的选择,同时在处理...

    Java调用Groovy

    Java调用Groovy是一种常见的技术,特别是在开发过程中需要动态脚本支持时。Groovy是一种基于JVM(Java Virtual Machine)的、动态类型的编程语言,它与Java有着良好的互操作性,能够无缝集成到Java项目中。这篇博客...

    基于groovy实现 java脚本动态编译、部署、发布;可以通过脚本直接调用dubbo接口.zip

    本文将深入探讨如何基于Groovy实现Java脚本的动态编译、部署和发布,并且介绍如何通过Groovy脚本直接调用Dubbo接口,从而提高开发效率和灵活性。 Groovy是一种基于Java平台的强大的动态编程语言,它具有简洁的语法...

    groovy-src-1.8.5.zip_.bzrignore_Groovy_Java 8_groovy src_lowern

    Groovy是一种强大的、灵活的、面向对象的编程语言,它被设计用来运行在Java平台上,与Java语言紧密集成。Groovy结合了脚本语言的简洁性和动态性,同时提供了静态类型的编译选项,使得它在Java开发环境中尤其受欢迎。...

    Java整合Groovy脚本笔记

    Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合Groovy脚本,Java整合Groovy脚本Java整合...

    Making Java Groovy源码

    Making Java Groovy Kenneth A. Kousen 1.Easier Java 2.Closures, builders, and metaprogramming 3.Gradle for builds, Spock for testing 4.Groovy frameworks like Grails and Griffon 源码

    Groovy Recipes Greasing the Wheels of Java.pdf

    总的来说,《Groovy食谱:润滑Java的轮子》是一本针对Java开发者的技术宝典,它不仅教会你如何使用Groovy,更重要的是,它向你展示了如何通过Groovy来改变你的开发方式,让你的工作变得更加高效、有趣。无论是对于...

    groovy programming(2006.12).pdf

    Groovy是一种基于Java平台的动态语言,设计上兼容Java语法,同时提供了一些更简洁、表达力更强的语法特性。Groovy不仅能在Java虚拟机(JVM)上运行,还能与现有的Java代码无缝集成,这使得Groovy成为Java生态系统中的...

    groovy

    1. 更简洁的语法:Groovy允许省略许多Java中的冗余部分,如分号、大括号以及get/set方法。这使得代码更易读、更简洁。 2. 动态类型:Groovy是动态类型的,变量的类型在运行时确定,减少了编译时的约束,提高了开发...

Global site tag (gtag.js) - Google Analytics