groovy
groovy是java语言的脚本实现,使用标准的java环境。 groovy编译器产生的字节码和java编译器产生的字节码是一样的。
groovy的运行原理是动态的编译成字节码的,然后再由JVM进行转载,运行
语法简练,易于理解,类java语法
在java中嵌入groovy,有助于编写和集中处理易于变化的业务逻辑,给应用提供了可编程的配置管理能力,是对java语言的一大补充
groovy的优势:
和java的无缝集成,有更快捷的应用开发能力,灵活但不失去java的健壮性
wuzhong@TAOBAOWDS46:~/workspace/groovy$ more Test.groovy class Test{ private pri; //定义了一个Object类型的私有属性 protected pro; //定义了一个Object类型的protected属性 public pub; //定义了一个Object类型的public属性 int i; //默认是public的,所以定义了一个int public属性 def a; //定义了一个Object public属性 private hello(){ //定义了一个私有的,返回类型是Object的方法 } def test(){ //定义了一个共有的,返回是Object的test方法 return 1 } }
编译groovy脚本groovyc Test.groovy
得到java的2进制字节码文件: Test.class
打开来瞧瞧 , javap Test
wuzhong@TAOBAOWDS46:~/workspace/groovy$ javap Test Compiled from "Test.groovy" public class Test extends java.lang.Object implements groovy.lang.GroovyObject{ protected java.lang.Object pro; public java.lang.Object pub; public Test(); public java.lang.Object test(); public int getI(); //对public自动生成的get和set方法 public void setI(int); public java.lang.Object getA(); public void setA(java.lang.Object); public java.lang.Object this$2$hello(); ... ... ... }
了解这个后,相信大家对groovy就感到十分的熟悉了 ^_^
wuzhong@TAOBAOWDS46:~/workspace/groovy$ more Hello.groovy System.out.println("hello world") wuzhong@TAOBAOWDS46:~/workspace/groovy$ groovyc Hello.groovy wuzhong@TAOBAOWDS46:~/workspace/groovy$ javap Hello Compiled from "Hello.groovy" public class Hello extends groovy.lang.Script{ public Hello(); public Hello(groovy.lang.Binding); public static void main(java.lang.String[]); public java.lang.Object run(); .... }
在编译时就把它编译到类了,然后自动生成了main方法,run方法主要就是放刚才的print 业务逻辑的,我们可以看下反编译后的代码:
public Object run() { CallSite acallsite[] = $getCallSiteArray(); return acallsite[1].call(acallsite[2].callGetProperty($get$$class$java$l ang$System()), "hello world"); }
和ruby的很类似
又见集合又见和ruby相似的闭包(代码块) //定义一个List def num = [1,2,3,4] num.each{it -> println it*2}
groovy入门
http://www.ibm.com/developerworks/cn/java/j-pg02179.html
groovy与java的异同
http://ivorytower.iteye.com/blog/182547
groovy与spring的整合
http://shipmaster.iteye.com/blog/8462741