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