1. 程式人生 > >groovy語言的DSL特性

groovy語言的DSL特性

 

groovy語言可用作DSL,現在,使用groovy語言編寫配置檔案也越來越流行。

剛開始閱讀groovy語言DSL方式的寫法時,那真叫一個看不懂。

gradle是執行在groovy之上的一個專案構建工具。請看如下使用groovy語言寫成的gradle配置檔案build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.6.RELEASE")
    }
}
dependencies {
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile("org.springframework.boot:spring-boot-starter-security")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    testCompile("mysql:mysql-connector-java:5.1.25")
}

我們來從groovy語法上理解下上述配置檔案的含義。

首先呼叫了buildscript方法,這個方法的引數是個閉包,這個閉包就是緊隨buildsrcipt之後的大括號。

在這個閉包中,依次呼叫了repositories、dependencies兩個方法。在reponsitories方法的閉包中呼叫了mavenCentral方法,

在dependencies方法的閉包中呼叫了classpath方法。

再來看下,最後一個dependencies方法。在這個方法的閉包中,首先呼叫了compile方法,這個compile方法也可以寫成:

compile("org.springframework.boot:spring-boot-starter-web", {exclude module: "spring-boot-starter-tomcat"})

這個方法有兩個引數,一個是字串"org.springframework.boot:spring-boot-starter-web",另一個是緊隨其後的閉包。

在緊隨其後的這個閉包中,呼叫了exclude方法,這個方法的引數是module: "spring-boot-starter-tomcat",這個方法的引數是個Map物件,這個Map物件中有一個鍵值對,這個鍵值對的鍵是module,值是"spring-boot-starter-tomcat"。

現在我們再來看一個使用groovy編寫的Spring配置檔案:

beans {
    //beanName(type)  
    dataSource(BasicDataSource) {
        //注入屬性
        driverClassName = "org.hsqldb.jdbcDriver"
        url = "jdbc:hsqldb:mem:grailsDB"
        username = "sa"
        password = ""
        settings = [mynew:"setting"]
    }
    sessionFactory(SessionFactory) {
       //注入屬性,引用其他Bean
        dataSource = dataSource
    }
    myService(MyService) {
       //使用閉包定義巢狀的Bean
        nestedBean = { AnotherBean bean ->
            dataSource = dataSource
        }
    }
}