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

    }
    說明: 江南白衣已實現(xiàn)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) 
    // 調(diào)用過程

    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久都還沒有加入正式代碼,大家要的找我。  回復  更多評論   

    主站蜘蛛池模板: 免费少妇a级毛片人成网| 亚洲成_人网站图片| 国产福利免费在线观看| 一级毛片在线免费看| 理论秋霞在线看免费| 亚洲伊人精品综合在合线| 狠狠综合久久综合88亚洲| 性xxxx视频播放免费| 91人人区免费区人人| 99视频在线免费观看| 免费很黄无遮挡的视频毛片| 性xxxx黑人与亚洲| 亚洲精品视频免费看| 亚洲熟女少妇一区二区| 亚洲成av人片不卡无码久久| 免费观看大片毛片| 97免费人妻无码视频| 一级成人a毛片免费播放| a级片在线免费看| 精品国产污污免费网站入口在线| 色吊丝免费观看网站| 亚洲国产成人AV在线播放| 亚洲人成影院77777| 亚洲精品高清国产麻豆专区| 久久精品国产亚洲AV麻豆网站| 久久久久亚洲av无码尤物| 国产AV无码专区亚洲AV漫画| 国产精品亚洲高清一区二区| 一区国严二区亚洲三区| 国产成人免费手机在线观看视频| 成人男女网18免费视频| 无码专区永久免费AV网站| 韩国免费一级成人毛片| 在线看片韩国免费人成视频| 69视频免费在线观看| 7x7x7x免费在线观看| 国产大片免费网站不卡美女| 久久久久久精品免费看SSS| 精品国产污污免费网站aⅴ| 3344永久在线观看视频免费首页 | 国产免费的野战视频|