<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    waterye

    Groovy快速入門

    Groovy is an agile dynamic language for the Java 2 Platform that has many of the features that people like so much in languages like Python, Ruby and Smalltalk, making them available to Java developers using a Java-like syntax.

    groovy資源
    Official Site: http://groovy.codehaus.org/
    JIRA: http://jira.codehaus.org/secure/BrowseProject.jspa?id=10242
    Confluence:  http://radio.weblogs.com/0112098/
    Project Manager's blog: http://glaforge.free.fr/weblog/

    使用IDEA的用戶, groovyj非常方便, 不用設定groovy_home, 將jar加入classpath等麻煩事

    1. groovy string

    def h = 'hello'
    def gs 
    = """${h}:
    Java,
    Python,
    Ruby
    """

    println h[
    4..0]
    println gs


    2. groovy beans

    class Customer {
        @Property Integer id
        @Property String name
    }


    def customer 
    = new Customer(id:6, name:"Water Ye")
    println 
    "Hello: ${customer.name}"


    //含有只讀或只寫屬性的Bean:
    class Foo {
        
    // read only property
        private String name
        
    public String getName() return name }

        
    // read only property with protected setter
        @Property Integer amount
        
    protected void setAmount(Integer amount) this.amount = amount }

        
    // dynamically typed property
        def cheese
    }

    3. Groovy Collections
    List:
    def list 
    = ['Java''Python''Ruby']
    for (i in list) { println i } 
    list.each 
    { item | println "${item}" }

    Ranges:
    def range 
    = 1..10
    for (i in range) { println i }

    Map:
    def map 
    = ["id":6"firstName":"Water""lastName":"Ye"]
    println map.
    get("id"+ "" + map["firstName"+ " " + map.lastName


    4. Groovy Closures
    Closure(閉包): Closures are a powerful way of passing around blocks of executable code. Think of closures as being like anonymous inner classes in Java that have only a single (anonymous) method.

    int x, y;
    = 2;
    // create closure and assign it to variable C
    def c = {numberToSquare -> numberToSquare * numberToSquare }
    = c.call(x)    // y == 4

    5. GPath
    import org.codehaus.groovy.sandbox.util.XmlSlurper


    def xmlStr 
    = """
    <a>
    <b id="b1" name="bn1">
    <c id="c1">c1</c>
    </b>
    <b id="b2" name="bn2">
    <c id="c2" >c2</c>
    </b>
    </a>
    """
    def node = new XmlSlurper().parseText(xmlStr)
    // 遍歷所有b結點
    def bs = node.b
    for (b in bs)
        println 
    "b: id = " + b['@id'+ ", name = " + b['@name']
    // 查找c2 
    def c = node.b.c.find { it['@id'== 'c2' } 
    if (c != null)
        println c.text()

    // 缺點:沒有getParent(), 丑陋的解決方法
    def b = null
    def bs 
    = node.b
    for (t in bs) {
        def c 
    = t.c.find { it['@id'== 'c2' } 
        
    if (c != null{
            b 
    = t
            
    break
        }

    }
    說明: 江南白衣已實現getParent()

    6. groovy builder
    import groovy.xml.*
    import java.io.
    *

    def writer 
    = new StringWriter()
    def builder 
    = new MarkupBuilder(writer)
    builder.person() 
    {
        name(first:
    "Water", last:"Ye"{
            id(
    "006")
            age(
    "25")
            gender(
    "male")
            email(
    "ychunshui@yahoo.com.cn")
        }

    }

    println writer.toString()
    輸出結果:
    <person>
      
    <name first='Water' last='Ye'>
        
    <id>006</id>
        
    <age>25</age>
        
    <gender>male</gender>
        
    <email>ychunshui@yahoo.com.cn</email>
      
    </name>
    </person>

    7. Groovlets
    // index.groovy 
    import java.util.Date
    import groovy.xml.MarkupBuilder
    if (session.counter == null{
          session.counter 
    = 1
    }

    html 
    = new MarkupBuilder(out)
    html.html 
    {
      head 
    {
          title(
    "Groovy Servlet")
      }

      body 
    {
        p(
    "Hello, ${request.remoteHost}: ${session.counter}! ${new Date()}")
      }

    }

    session.counter 
    = session.counter + 1
    <!-- web.xml -->
    <servlet>
    <servlet-name>Groovy</servlet-name>
    <servlet-class>groovy.servlet.GroovyServlet</servlet-class>
    </servlet> 

    <servlet-mapping>
    <servlet-name>Groovy</servlet-name>
    <url-pattern>*.groovy</url-pattern>
    </servlet-mapping>

    8. groovy ant task
    <taskdef name="groovy" 
             classname
    ="org.codehaus.groovy.ant.Groovy"
             classpathref
    ="my.classpath"/>
    <groovy>
      println("Hello World")
    </groovy>

    9. groovy sql
    import groovy.sql.Sql

    def sql 
    = Sql.newInstance(url, user, password, driver)
    def sql 
    = new Sql(dataSource)
    def sql 
    = new Sql(connection)

    sql.eachRow(
    "select * from person"{ row |
        println row.id 
    + " " + row.name
    }


    def goods 
    = sql.dataSet('GOODS')
    def material 
    = goods.findAll { it.type == 'M' }
    material.each 
    { println "name: ${it.name}" }

    sql.execute(sqlStr) 
    sql.executeUpdate(sqlStr)

    sql.call(sqlStr) 
    // 調用過程

    sql.rollback()
    sql.commit()

    sql.close()

    注意: 使用groovyj的話, 變量不要和文件名相同, 否則出錯

    posted on 2005-08-22 21:52 waterye 閱讀(885) 評論(1)  編輯  收藏 所屬分類: groovy

    Feedback

    # re: Groovy快速入門 2005-08-25 12:36 江南白衣@ITO

    對阿,xml支持parent()了,但提交上去后N久都還沒有加入正式代碼,大家要的找我。  回復  更多評論   

    主站蜘蛛池模板: 夜夜爽免费888视频| 亚洲成aⅴ人片在线观| 77777亚洲午夜久久多喷| 久久久久久AV无码免费网站下载| 久久久久亚洲精品天堂| 女人被男人桶得好爽免费视频| 有色视频在线观看免费高清在线直播 | 野花视频在线官网免费1| 亚洲国产精华液网站w| 人妻仑乱A级毛片免费看| 666精品国产精品亚洲| 亚洲?V无码乱码国产精品 | 日本永久免费a∨在线视频| 亚洲AV人无码综合在线观看| 好大好硬好爽免费视频| 野花香在线视频免费观看大全| 亚洲永久无码3D动漫一区| 一区二区三区免费视频网站| 亚洲国产精品xo在线观看| 亚洲毛片av日韩av无码| 一个人免费观看www视频| 亚洲国产成人资源在线软件| 亚洲精品无码久久毛片| 日韩一区二区a片免费观看 | 亚洲国产成a人v在线观看| 成人午夜亚洲精品无码网站| 最近中文字幕mv免费高清电影 | 中文字幕影片免费在线观看| 好湿好大好紧好爽免费视频| 亚洲欧美日韩国产精品一区| 中文字幕亚洲精品| 老司机亚洲精品影视www| 日本免费人成网ww555在线| 国产亚洲男人的天堂在线观看| 狠狠色婷婷狠狠狠亚洲综合| 久久久久国产精品免费免费搜索| 女人体1963午夜免费视频| 日韩少妇内射免费播放| 亚洲AV无码一区二区三区网址| 亚洲国产综合无码一区二区二三区| 国产精品永久免费10000|