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 閱讀(891) 評論(1)  編輯  收藏 所屬分類: groovy

          Feedback

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

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

          主站蜘蛛池模板: 天镇县| 汤原县| 银川市| 安塞县| 旌德县| 东阳市| 新竹市| 尼勒克县| 江山市| 康马县| 南平市| 沙雅县| 和龙市| 互助| 兴国县| 梓潼县| 霍林郭勒市| 龙江县| 兰坪| 于田县| 时尚| 桦川县| 陇川县| 南充市| 竹溪县| 蓬莱市| 吴江市| 洛浦县| 上饶市| 兴义市| 玉溪市| 福鼎市| 贺兰县| 天台县| 汉源县| 顺义区| 阳春市| 海淀区| 宁德市| 莱阳市| 武隆县|