`
江南白衣
  • 浏览: 550007 次
  • 来自: 广州
社区版块
存档分类
最新评论

Groovy 笔记

阅读更多

作者:江南白衣 

1.Groovy的最新八卦之处

1.1 Wiki: http://docs.codehaus.org/pages/listpages.action?key=GROOVY
1.2 Mail list的在线浏览和rss定阅 
       Developer List http://dir.gmane.org/gmane.comp.lang.groovy.devel
       User List: http://dir.gmane.org/gmane.comp.lang.groovy.user

2.Groovy的开发现状和未来
    编译期健壮性大大增强的1.0 JSR-2,全力除Bug的1.0 JSR-3JSR-4已经发布。
    第二次全球Groovy 开发人员FB大会也在巴黎开完,有决议若干
    理论上 1.0正式版很快就要发布。 
    而计划中的1.1版本将支持 ruby的maxin、continuations 和JDK1.5的Annotatin。

3.Groovy and Java的暧昧关系
   作为Java的私生子,Groovy的最终可执行状态是Java class bytecode,所以Java代码里可以把它当普通Java Bean一样调用。还有,Groovy的基础类库,都是用Java代码来写的。

   3.1 编译Java class bytecode
   就像JSP的最终面目是servlet class,GroovyC也会把groovy文件编译成Java class bytecode以在JVM上运行。
   其中Groovy Class会编译成GroovyObject的子类,Groovy Script代码段会编译成Script的子类。
     
    可以用GroovyC来静态编译,也可以在Java程序里用GroovyShell动态parse Groovy文件。

    3.2 在Java代码中调用Groovy
         1.Groovy类:
         GroovyObject类默认有get/setProperty()和invokeMethod()的反射接口,在Java代码里,可以直接调用Groovy类的方法,也可以通过反射接口来调用。

         2.Script代码段:
         Script类有Script(Binding)构造函数和run()接口,在java里先通过Script(Binding)构造一个Script类,绑定变量,然后通过run接口进行调用。

    3.3 在Java中直接使用Groovy的类库
    Groovy和Groovy的框架类库都是用Java写出来的的。所以有些类库如SimpleTemplateEngine,也可以在Java里直接使用,不用绕Groovy一圈。

4.groovyJ插件
    groovyJ是IDEA插件,有语法变色和Run()功能,更有用的功能是编译Java文件目录时,会把其中的groovy文件也一同编译。而日后将支持重构、类间跳转等功能,值得期待。
    而Eclipse插件只有Run()和语法变色,而且随着Eclipse的升级时灵时不灵,正在花时间实用化中。
    NetBeans开了个Coyote的项目来支持脚本语言。

5.一些重要的开发人员 
    一个PM:
    Guillaume Laforge

    两个Founder:
    Bob Mcwhirter (同时是Drools,Dom4J的founder
) ,
    James Strachan (Core Developers Network,同时work on Geronimo,Drools,ServiceMix 和很多Jarkarta 项目,似乎拥有无穷的精力)    

    三个来自ThoughtWorks的开发人员:
     Jame Walnes,Chris Stevenson,Matt Foemmel

    四个star of  JSR-2: 
     Jeremy Rayner, Jochen Theodorou,和两位老大一起改进JSR-2编译的强壮性和出错信息显示 
     Franck Rasolo:IDEA插件GroovyJ的开发人员 
     Christian Stein :Groovlet,Template的开发人员 

     Steven Devijver : Grails--Groovy on Rails的主持,同时是Spring Modules的leader。

6.有哪些使用Groovy的项目

Grails(Groovy on rails,大老们非常期待的项目,把rails在MVC和ORM的优点抄到java下,而且是基于Spring Framework的)

Drools(规则引擎, 用户可以用groovy写规则)

eXo platform(porlet/Service container,本身核心是groovy,用户可以用groovy 来写Porlet)

XWiki (第2代的wiki引擎、Application引擎。用户可以用groovy写Plug-in,Marco和Application)

RIFE(一个MVC/Web framework,用户可以用groovy写action和配置layout,workflow。还含有一个CRUD框架,用户用groovy 定义domain class,滴嗒一下,就能获得一个CRUD模型)

7.Groovy-all-1.0-jsr3.jar 
    groovy需要asm和antlr包的支持,使用groovy-all-10-jsr3.jar,将预带这两个包的正确版本,非常省心。

8.Migrating to JSR

    JSR版本语法的的最大改动有两处。网上很多Groovy文章都还是基于旧语法的,需要自己改正过来。
    8.1 为了加强代码健壮性,Class里的变量需要用def 定义。而在script里的变量因为是动态binding的,仍然不需要def定义。

    8.2 多行的String需要用 """ """而不是" "来括住。

9.SimpleTemplateEngine-总共200行就实现了JSP engine的功能
    动态语言开发框架很方便,所以Ruby on Rails没有IDEA级的IDE都能这么就把MVC、ORM都实现了一遍。
    请看src/groovy/text/SimpleTemplateEngine.java,总共219行。
    原理就是把模版中的文本部分替换成println """ 文本""" ,Groovy部分照搬,生成一个新的Groovy script,然后拿GroovyShell执行一遍就完成了。

10.如何用Java实现动态语言

 把GroovyC编译出来的class文件再用jad反编译,可以看到如何用Java去实现一门动态语言。
    主要是多了一个MetaClass, 不断的反射反射,运行时还非常依赖Asm


 最简单的例子:
   Groovy文件:

 public class Customer
 {
    
private String id;
 } 

   编译出来的Java文件

   public class Customer    implements GroovyObject 
  {
   
private String id;
   transient MetaClass metaClass; 
   
public Customer()
        {
            Object obj 
= ScriptBytecodeAdapter.invokeStaticMethod  ("org.codehaus.groovy.runtime.ScriptBytecodeAdapter""getMetaClass"this);
            Metaclass  metaclass 
= (MetaClass)ScriptBytecodeAdapter.asType(obj, groovy.lang.MetaClass.class); 
        } 
       
public Object invokeMethod(String s, Object obj)    {
       
public Object getProperty(String s)    {.}

11.ant 的编译脚本
   <path id="groovy.classpath"> 
       
<pathelement path="${basedir}/ROOT/WEB-INF/classes/"/>  
      
<fileset dir="${basedir}/ROOT/WEB-INF/lib">
            <include name="*.jar"/>
        </fileset>
    </path>
    <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc">
        <classpath refid="groovy.classpath"/>
    </taskdef>
    <target name="groovy">
        <groovyc destdir="${project.basedir}/ROOT/WEB-INF/classes"
         srcdir="${project.basedir}/src"    listfiles="true"> 
           
<classpath refid="groovy.classpath"/>
        </groovyc>
    </target>


分享到:
评论

相关推荐

    Groovy学习笔记 PDF版

    在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...

    Groovy 学习笔记

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个重要的补充。Groovy结合了Python、Ruby和Smalltalk等语言的特性,同时保留了与Java的无缝集成能力,使得它在编写脚本、构建工具、Web应用以及企业级应用程序...

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    groovy学习笔记

    以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...

    Java整合Groovy脚本笔记

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

    Groovy学习笔记 Struts2集成--Groovy类作为Action

    通过阅读文章《Groovy学习笔记 Struts2集成--Groovy类作为Action》,你可以更深入地了解如何在实际项目中利用Groovy的特性来优化Struts2应用。提供的压缩包文件`struts2-groovy-plugin`可能包含了Struts2 Groovy插件...

    Groovy_笔记

    根据给定的文件信息,以下是对Groovy编程语言中几个关键知识点的深入解析: ### 多线程在Groovy中的运用 在Groovy中,线程的创建与启动非常直观,可以通过构造`Thread`对象并传入一个闭包(Closure)来实现。闭包...

    读书笔记:Groovy程序设计.zip

    读书笔记:Groovy程序设计

    读书笔记:Groovy 程序设计学习.zip

    读书笔记:Groovy 程序设计学习

    Groovy语法&Gradle配置学习笔记

    Groovy是一种基于Java平台的动态编程语言,它在设计时考虑了简洁性和可读性,使得开发者能够更高效地编写脚本和构建工具。Groovy语法借鉴了多种语言的特性,如Python、Ruby和Java,这使得Java开发人员能够轻松上手。...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    Groovy是另一种基于JVM的动态编程语言,它的语法简洁,易于阅读和编写。Groovy与Java高度互操作,可以在现有的Java项目中无缝集成。Groovy的优点在于它支持闭包和元编程,使得代码更加简洁和可扩展。 Stackless ...

    java调用脚本语言笔记(jython,jruby,groovy)

    本文将深入探讨如何在Java中调用三种流行的脚本语言:Jython、JRuby和Groovy。 ### Jython Jython是Python的一个Java实现,它允许Java开发者利用Python的强大语法和丰富的库。要使用Jython,首先需要在项目中引入...

    用Groovy实现DSL领域定义语言

    本系列文章是从原著《Groovy For Domain-Specific Languages》(原作者: Fergal Dearle)中翻译而来,从中加入了一些本人自己的读书笔记和理解。本系列文章不为任何商业目的,只为更好的传播 groovy dsl 技术知识。...

    读书笔记:函数式编程 scala,java8,groovy 学习.zip

    读书笔记:函数式编程 scala,java8,groovy 学习

    sonar-groovy:Groovy的SonarQube插件

    在项目的根目录下创建一个sonar-project.properties文件从项目根目录运行sonar-scanner命令单击分析结尾处提供的链接,以在SonarQube UI中浏览项目的质量笔记CodeNarc :可以通过设置sonar.groovy.codenarc.repor

    Groovy-chenyun2000-mht.rar

    在Groovy-chenyun2000-mht.rar压缩包里的"MHT"文件可能是Groovy或Grails相关的教程、讲座笔记或者案例研究,用户可以离线阅读这些资料,深入理解Groovy语言和Grails框架。 Groovy的主要特点包括: 1. **简洁语法**...

    Jenkins笔记笔记笔记

    【Jenkins笔记笔记笔记】 Jenkins 是一个开源的持续集成(CI)服务器,它使得开发者能够在软件开发过程中实现自动化构建、测试和部署。这个工具在IT行业中被广泛使用,尤其在敏捷开发和DevOps实践中扮演着重要角色...

Global site tag (gtag.js) - Google Analytics