程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Web2.0新技術學習之Groovy筆記

Web2.0新技術學習之Groovy筆記

編輯:關於JAVA

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-3,JSR-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) {.}

<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>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved