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类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...
在Java开发中,Groovy是一种强大的、动态类型的脚本语言,它可以无缝地与Java代码集成,为开发者提供了更简洁、灵活的语法。本文将深入探讨在Java项目中使用Groovy的三种主要方式,并阐述它们各自的优势和应用场景。...
Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx
在IT行业中,尤其是在软件开发领域,灵活性和动态性是至关重要的。Java作为一种广泛使用的静态类型编程语言...通过结合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 [更多]
1. **Groovy的简洁语法**:Groovy的语法比Java更加简洁,比如它允许省略括号、类型声明等,这使得代码更易读写。例如,方法调用可以不带括号,变量声明可以省略类型,如: ```groovy def sayHello() { println '...
SpringBoot、Gradle、Maven、Java和Groovy是Java生态系统中的重要组成部分,它们在现代软件开发中扮演着至关重要的角色。这篇详细的知识点解析将深入探讨这些技术及其相互关系。 1. **SpringBoot**: SpringBoot是...
Groovy是一种基于JVM的动态编程语言,它与Java有着紧密的联系,可以直接调用Java的类库。Groovy的设计目标是提供一个简洁、灵活且强大的语法,使得开发者能够更高效地编写脚本和应用程序。在Java学习的过程中,了解...
- **简洁的语法**:Groovy语法比Java更简洁,例如,它允许省略分号和大括号,使得代码更易读。 - **闭包**:Groovy的闭包(类似函数引用)是其强大功能之一,常用于函数式编程和回调。 3. **集成Groovy到Java项目...
### Java与Groovy:融合的力量 #### 知识点一:Java与Groovy的关系 - **定义**:Groovy是一种面向对象的编程语言,它直接运行在Java平台上,并且能够与现有的Java代码无缝集成。 - **特点**: - **语法简洁**:...
总结起来,Groovy与Java的主要区别在于其更灵活的语法、丰富的内置功能(如闭包和元编程)、以及对脚本编写的支持。这些特性使Groovy在快速原型开发、脚本编写以及需要高度动态性的场合中成为理想的选择,同时在处理...
Java调用Groovy是一种常见的技术,特别是在开发过程中需要动态脚本支持时。Groovy是一种基于JVM(Java Virtual Machine)的、动态类型的编程语言,它与Java有着良好的互操作性,能够无缝集成到Java项目中。这篇博客...
本文将深入探讨如何基于Groovy实现Java脚本的动态编译、部署和发布,并且介绍如何通过Groovy脚本直接调用Dubbo接口,从而提高开发效率和灵活性。 Groovy是一种基于Java平台的强大的动态编程语言,它具有简洁的语法...
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整合...
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食谱:润滑Java的轮子》是一本针对Java开发者的技术宝典,它不仅教会你如何使用Groovy,更重要的是,它向你展示了如何通过Groovy来改变你的开发方式,让你的工作变得更加高效、有趣。无论是对于...
什么是 Groovy? Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java ...Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。(有时候会少很多!)
Groovy是一种基于Java平台的动态语言,设计上兼容Java语法,同时提供了一些更简洁、表达力更强的语法特性。Groovy不仅能在Java虚拟机(JVM)上运行,还能与现有的Java代码无缝集成,这使得Groovy成为Java生态系统中的...
1. 更简洁的语法:Groovy允许省略许多Java中的冗余部分,如分号、大括号以及get/set方法。这使得代码更易读、更简洁。 2. 动态类型:Groovy是动态类型的,变量的类型在运行时确定,减少了编译时的约束,提高了开发...