第一部分 Groovy起步
第1章 起步 2
1.1 安裝Groovy 2
1.1.1 在Windows係統環境安裝Groovy 2
1.1.2 在類Unix係統環境安裝Groovy 3
1.2 管理多個版本的Groovy 3
1.3 使用groovysh 4
1.4 使用groovyConsole 5
1.5 在命令行中運行Groovy 5
1.6 使用IDE 6
1.6.1 IntelliJ IDEA 6
1.6.2 Eclipse Groovy插件 6
1.6.3 TextMate Groovy Bundle 6
第2章 麵嚮Java開發者的Groovy 8
2.1 從Java到Groovy 8
2.1.1 Hello,Groovy 8
2.1.2 實現循環的方式 9
2.1.3 GDK一瞥 11
2.1.4 安全導航操作符 13
2.1.5 異常處理 13
2.1.6 Groovy是輕量級的Java 15
2.2 JavaBean 15
2.3 靈活初始化與具名參數 19
2.4 可選形參 20
2.5 使用多賦值 21
2.6 實現接口 22
2.7 布爾求值 25
2.8 操作符重載 27
2.9 對Java 5特性的支持 28
2.9.1 自動裝箱 29
2.9.2 for-each 29
2.9.3 enum 30
2.9.4 變長參數 31
2.9.5 注解 32
2.9.6 靜態導入 33
2.9.7 泛型 33
2.10 使用Groovy代碼生成變換 35
2.10.1 使用@Canonical 35
2.10.2 使用@Delegate 35
2.10.3 使用@Immutable 36
2.10.4 使用@Lazy 37
2.10.5 使用@Newify 38
2.10.6 使用@Singleton 38
2.11 陷阱 40
2.11.1 Groovy的==等價於Java的equals() 40
2.11.2 編譯時類型檢查默認為關閉 42
2.11.3 小心新的關鍵字 43
2.11.4 彆用這樣的代碼塊 43
2.11.5 閉包與匿名內部類的衝突 43
2.11.6 分號總是可選的 45
2.11.7 創建基本類型數組的不同語法 45
第3章 動態類型 47
3.1 Java中的類型 47
3.2 動態類型 48
3.3 動態類型不等於弱類型 49
3.4 能力式設計 50
3.4.1 使用靜態類型 50
3.4.2 使用動態類型 51
3.4.3 使用動態類型需要自律 53
3.5 可選類型 54
3.6 多方法 55
3.7 動態還是非動態 58
3.8 關閉動態類型 58
3.8.1 靜態類型檢查 59
3.8.2 靜態編譯 62
第4章 使用閉包 64
4.1 閉包的便利性 64
4.1.1 傳統方式 64
4.1.2 Groovy方式 65
4.2 閉包的應用 67
4.3 閉包的使用方式 68
4.4 嚮閉包傳遞參數 69
4.5 使用閉包進行資源清理 70
4.6 閉包與協程 72
4.7 科裏化閉包 74
4.8 動態閉包 75
4.9 閉包委托 77
4.10 使用尾遞歸編寫程序 80
4.11 使用記憶化改進性能 82
第5章 使用字符串 87
5.1 字麵常量與錶達式 87
5.2 GString的惰性求值問題 90
5.3 多行字符串 93
5.4 字符串便捷方法 95
5.5 正則錶達式 96
第6章 使用集閤類 98
6.1 使用List 98
6.2 迭代ArrayList 100
6.2.1 使用List的each方法 100
6.2.2 使用List的collect方法 102
6.3 使用查找方法 102
6.4 List上的其他便捷方法 103
6.5 使用Map類 106
6.6 在Map上迭代 108
6.6.1 Map的each方法 108
6.6.2 Map的collect方法 109
6.6.3 Map的find和findAll方法 109
6.7 Map上的其他便捷方法 110
第二部分 使用Groovy
第7章 探索GDK 114
7.1 使用Object類的擴展 114
7.1.1 使用dump和inspect方法 115
7.1.2 使用上下文with()方法 115
7.1.3 使用sleep 116
7.1.4 間接訪問屬性 118
7.1.5 間接調用方法 119
7.2 其他擴展 119
7.2.1 數組的擴展 120
7.2.2 使用java.lang的擴展 120
7.2.3 使用java.io的擴展 122
7.2.4 使用java.util的擴展 124
7.3 使用擴展模塊定製方法 125
第8章 處理XML 128
8.1 解析XML 128
8.1.1 使用DOMCategory 129
8.1.2 使用XMLParser 131
8.1.3 使用XMLSlurper 131
8.2 創建XML 133
第9章 使用數據庫 136
9.1 創建數據庫 136
9.2 連接到數據庫 137
9.3 數據庫的Select操作 137
9.4 將數據轉為XML錶示 139
9.5 使用DataSet 140
9.6 插入與更新 140
9.7 訪問Microsoft Excel 141
第10章 使用腳本和類 143
10.1 Java和Groovy的混閤 143
10.2 運行Groovy代碼 144
10.3 在Groovy中使用Groovy類 145
10.4 利用聯閤編譯混閤使用Groovy和Java 145
10.5 在Java中創建與傳遞Groovy閉包 146
10.6 在Java中調用Groovy動態方法 148
10.7 在Groovy中使用Java類 150
10.8 從Groovy中使用Groovy腳本 151
10.9 從Java中使用Groovy腳本 153
第三部分 MOP與元編程
第11章 探索元對象協議 158
11.1 Groovy對象 159
11.2 查詢方法與屬性 162
11.3 動態訪問對象 164
第12章 使用MOP攔截方法 166
12.1 使用GroovyInterceptable攔截方法 166
12.2 使用MetaClass攔截方法 168
第13章 MOP方法注入 173
13.1 使用分類注入方法 173
13.2 使用ExpandoMetaClass注入方法 178
13.3 嚮具體的實例中注入方法 182
13.4 使用Mixin注入方法 184
13.5 在類中使用多個Mixin 187
第14章 MOP方法閤成 192
14.1 使用methodMissing閤成方法 192
14.2 使用ExpandoMetaClass閤成方法 196
14.3 為具體的實例閤成方法 199
第15章 MOP技術匯總 201
15.1 使用Expando創建動態類 201
15.2 方法委托:匯總練習 203
15.3 MOP技術迴顧 207
15.3.1 用於方法攔截的選項 207
15.3.2 用於方法注入的選項 207
15.3.3 用於方法閤成的選項 208
第16章 應用編譯時元編程 209
16.1 在編譯時分析代碼 209
16.1.1 理解代碼結構 210
16.1.2 在代碼結構中導航 211
16.2 使用AST變換攔截方法調用 214
16.3 使用AST變換注入方法 218
第四部分 使用元編程
第17章 Groovy生成器 224
17.1 構建XML 224
17.2 構建JSON 227
17.3 構建Swing應用 229
17.4 使用元編程定製生成器 230
17.5 使用BuilderSupport 233
17.6 使用FactoryBuilderSupport 236
第18章 單元測試與模擬 240
18.1 本書代碼與自動化單元測試 240
18.2 對Java和Groovy代碼執行單元測試 241
18.3 測試異常 245
18.4 模擬 245
18.5 使用覆蓋實現模擬 247
18.6 使用分類實現模擬 250
18.7 使用ExpandoMetaClass實現模擬 251
18.8 使用Expando實現模擬 253
18.9 使用Map實現模擬 255
18.10 使用Groovy Mock Library實現模擬 255
18.10.1 使用StubFor 256
18.10.2 使用MockFor 257
第19章 在Groovy中創建DSL 261
19.1 上下文 261
19.2 流暢 262
19.3 DSL的分類 263
19.4 設計內部的DSL 264
19.5 Groovy與DSL 264
19.6 使用命令鏈接特性改進流暢性 265
19.7 閉包與DSL 266
19.8 方法攔截與DSL 267
19.9 括號的限製與變通方案 268
19.10 分類與DSL 270
19.11 ExpandoMetaClass與DSL 271
附錄A Web資源 273
附錄B 參考書目 277
· · · · · · (
收起)