第1部分 Spring的核心
第1章 Spring之旅 3
1.1 簡(jiǎn)化Java開(kāi)發(fā) 4
1.1.1 激發(fā)POJO的潛能 5
1.1.2 依賴(lài)注入 5
1.1.3 應用切面 11
1.1.4 使用模板消除樣板式代碼 16
1.2 容納你的Bean 18
1.2.1 使用應用上下文 19
1.2.2 bean的生命周期 20
1.3 俯瞰Spring風(fēng)景線(xiàn) 21
1.3.1 Spring模塊 22
1.3.2 Spring Portfolio 24
1.4 Spring的新功能 27
1.4.1 Spring 3.1新特性 27
1.4.2 Spring 3.2新特性 28
1.4.3 Spring 4.0新特性 30
1.5 小結 30
第2章 裝配Bean 33
2.1 Spring配置的可選方案 34
2.2 自動(dòng)化裝配bean 35
2.2.1 創(chuàng )建可被發(fā)現的bean 35
2.2.2 為組件掃描的bean命名 38
2.2.3 設置組件掃描的基礎包 39
2.2.4 通過(guò)為bean添加注解實(shí)現自動(dòng)裝配 40
2.2.5 驗證自動(dòng)裝配 42
2.3 通過(guò)Java代碼裝配
bean 44
2.3.1 創(chuàng )建配置類(lèi) 44
2.3.2 聲明簡(jiǎn)單的bean 45
2.3.3 借助JavaConfig實(shí)現注入 46
2.4 通過(guò)XML裝配bean 48
2.4.1 創(chuàng )建XML配置規范 48
2.4.2 聲明一個(gè)簡(jiǎn)單的
49
2.4.3 借助構造器注入初始化bean 50
2.4.4 設置屬性 56
2.5 導入和混合配置 61
2.5.1 在JavaConfig中引用XML配置 61
2.5.2 在XML配置中引用JavaConfig 63
2.6 小結 65
第3章 高級裝配 67
3.1 環(huán)境與profile 67
3.1.1 配置profile bean 69
3.1.2 激活profile 73
3.2 條件化的bean 75
3.3 處理自動(dòng)裝配的歧義性 78
3.3.1 標示首選的bean 79
3.3.2 限定自動(dòng)裝配的bean 80
3.4 bean的作用域 84
3.4.1 使用會(huì )話(huà)和請求作用域 86
3.4.2 在XML中聲明作用域代理 88
3.5 運行時(shí)值注入 88
3.5.1 注入外部的值 89
3.5.2 使用Spring表達式語(yǔ)言進(jìn)行裝配 93
3.6 小結 99
第4章 面向切面的Spring 101
4.1 什么是面向切面編程? 102
4.1.1 定義AOP術(shù)語(yǔ) 103
4.1.2 Spring對AOP的支持 105
4.2 通過(guò)切點(diǎn)來(lái)選擇連接點(diǎn) 107
4.2.1 編寫(xiě)切點(diǎn) 108
4.2.2 在切點(diǎn)中選擇bean 109
4.3 使用注解創(chuàng )建切面 109
4.3.1 定義切面 110
4.3.2 創(chuàng )建環(huán)繞通知 114
4.3.3 處理通知中的參數 115
4.3.4 通過(guò)注解引入新功能 118
4.4 在XML中聲明切面 120
4.4.1 聲明前置和后置通知 122
4.4.2 聲明環(huán)繞通知 124
4.4.3 為通知傳遞參數 125
4.4.4 通過(guò)切面引入新的功能 127
4.5 注入AspectJ切面 128
4.5 小結 131
第2部分 Web中的Spring
第5章 構建Spring Web應用程序 135
5.1 Spring MVC起步 136
5.1.1 跟蹤Spring MVC的請求 136
5.1.2 搭建Spring MVC 138
5.1.3 Spittr應用簡(jiǎn)介 142
5.2 編寫(xiě)基本的控制器 143
5.2.1 測試控制器 145
5.2.2 定義類(lèi)級別的請求處理 146
5.2.3 傳遞模型數據到視圖中 147
5.3 接受請求的輸入 153
5.3.1 處理查詢(xún)參數 153
5.3.2 通過(guò)路徑參數接受輸入 155
5.4 處理表單 157
5.4.1 編寫(xiě)處理表單的控制器 160
5.4.2 校驗表單 163
5.5 小結 166
第6章 渲染W(wǎng)eb視圖 167
6.1 理解視圖解析 167
6.2 創(chuàng )建JSP視圖 170
6.2.1 配置適用于JSP的視圖解析器 170
6.2.2 使用Spring的JSP庫 172
6.3 使用Apache Tiles視圖定義布局 184
6.3.1 配置Tiles視圖解析器 185
6.4 使用Thymeleaf 190
6.4.1 配置Thymeleaf視圖解析器 190
6.4.2 定義Thymeleaf模板 192
6.5 小結 196
第7章 Spring MVC的高級技術(shù) 197
7.1 Spring MVC配置的替代方案 198
7.1.1 自定義DispatcherServlet配置 198
7.1.2 添加其他的Servlet和Filter 199
7.1.3 在web.xml中聲明DispatcherServlet 201
7.2 處理multipart形式的數據 204
7.2.1 配置multipart解析器 205
7.2.2 處理multipart請求 208
7.3 處理異?!?12
7.3.1 將異常映射為HTTP狀態(tài)碼 213
7.3.2 編寫(xiě)異常處理的方法 214
7.4 為控制器添加通知 216
7.5 跨重定向請求傳遞數據 217
7.5.1 通過(guò)URL模板進(jìn)行重定向 218
7.5.2 使用flash屬性 219
7.6 小結 221
第8章 使用Spring WebFlow 223
8.1 在Spring中配置Web Flow 224
8.1.1 裝配流程執行器 224
8.1.2 配置流程注冊表 224
8.1.3 處理流程請求 225
8.2 流程的組件 226
8.2.1 狀態(tài) 226
8.2.2 轉移 230
8.2.3 流程數據 231
8.3 組合起來(lái):披薩流程 232
8.3.1 定義基本流程 233
8.3.2 收集顧客信息 236
8.3.2 構建訂單 242
8.3.2 支付 244
8.4 保護Web流程 246
8.5 小結 246
第9章 保護Web應用 249
9.1 Spring Security簡(jiǎn)介 250
9.1.1 理解Spring Security的模塊 250
9.1.2 過(guò)濾Web請求 251
9.1.3 編寫(xiě)簡(jiǎn)單的安全性配置 252
9.2 選擇查詢(xún)用戶(hù)詳細信息的服務(wù) 255
9.2.1使用基于內存的用戶(hù)存儲 255
9.2.2 基于數據庫表進(jìn)行認證 257
9.2.3 基于LDAP進(jìn)行認證 259
9.2.4 配置自定義的用戶(hù)服務(wù) 263
9.3 攔截請求 265
9.3.1 使用Spring表達式進(jìn)行安全保護 267
9.3.2 強制通道的安全性 269
9.3.3 防止跨站請求偽造 270
9.4 認證用戶(hù) 271
9.4.1 添加自定義的登錄頁(yè) 272
9.4.2 啟用HTTP Basic認證 274
9.4.3 啟用Remember-me功能 274
9.4.4 退出 275
9.5 保護視圖 276
9.5.1 使用Spring Security的JSP標簽庫 276
9.5.2 使用Thymeleaf的SpringSecurity方言 280
9.6 小結 281
第3部分 后端中的Spring
第10章 通過(guò)Spring和JDBC征服數據庫 285
10.1 Spring的數據訪(fǎng)問(wèn)哲學(xué) 286
10.1.1 了解Spring的數據訪(fǎng)問(wèn)異常體系 287
10.1.2 數據訪(fǎng)問(wèn)模板化 289
10.2 配置數據源 291
10.2.1 使用JNDI數據源 292
10.2.2 使用數據源連接池 292
10.2.3 基于JDBC驅動(dòng)的數據源 294
10.2.4 使用嵌入式的數據源 295
10.2.5 使用profile選擇數據源 296
10.3 在Spring中使用
JDBC 298
10.3.1 應對失控的JDBC代碼 299
10.3.2 使用JDBC模板 302
10.4 小結 307
第11章 使用對象-關(guān)系映射持久化數據 309
11.1 在Spring中集成Hibernate 310
11.1.1 聲明Hibernate的Session工廠(chǎng) 311
11.1.2 構建不依賴(lài)于Spring的Hibernate代碼 313
11.2 Spring與Java持久化API 315
11.2.1 配置實(shí)體管理器工廠(chǎng) 315
11.2.2 編寫(xiě)基于JPA的Repository 320
11.3 借助Spring Data實(shí)現自動(dòng)化的JPA Repository 322
11.3.1 定義查詢(xún)方法 325
11.3.2 聲明自定義查詢(xún) 328
11.3.3 混合自定義的功能 329
11.4 小結 330
第12章 使用NoSQL數據庫 333
12.1 使用MongoDB持久化文檔數據 334
12.1.1 啟用MongoDB 335
12.1.2 為模型添加注解,實(shí)現MongoDB持久化 338
12.1.3 使用MongoTemplate訪(fǎng)問(wèn)MongoDB 341
12.1.4 編寫(xiě)MongoDBRepository 342
12.2 使用Neo4j操作圖數據 347
12.2.1 配置Spring DataNeo4j 347
12.2.2 使用注解標注圖實(shí)體 350
12.2.3 使用Neo4jTemplate 353
12.2.4 創(chuàng )建自動(dòng)化的Neo4j Repository 354
12.3 使用Redis操作key-value數據 359
12.3.1 連接到Redis 359
12.3.2 使用RedisTemplate 360
12.3.3 使用key和value的序列化器 364
12.4 小結 365
第13章 緩存數據 367
13.1 啟用對緩存的支持 368
13.1.1 配置緩存管理器 369
13.2 為方法添加注解以支持緩存 373
13.2.1 填充緩存 374
13.2.2 移除緩存條目 378
13.3 使用XML聲明緩存 379
13.4 小結 383
第14章 保護方法應用 385
14.1 使用注解保護方法 386
14.1.1 使用@Secured注解限制方法調用 386
14.1.2 在Spring Security中使用
JSR-250的@RolesAllowed注解 387
14.2 使用表達式實(shí)現方法級別的安全性 388
14.2.1 表述方法訪(fǎng)問(wèn)規則 389
14.2.2 過(guò)濾方法的輸入和輸出 391
14.3 小結 395
第4部分 Spring集成
第15章 使用遠程服務(wù) 399
15.1 Spring遠程調用概覽 400
15.2 使用RMI 402
15.2.1 導出RMI服務(wù) 403
15.2.2 裝配RMI服務(wù) 405
15.3 使用Hessian和Burlap發(fā)布遠程服務(wù) 407
15.3.1 使用Hessian和Burlap導出bean的功能 408
15.3.2 訪(fǎng)問(wèn)Hessian/Burlap服務(wù) 411
15.4 使用Spring的HttpInvoker 413
15.4.1 將bean導出為HTTP服務(wù) 413
15.4.2 通過(guò)HTTP訪(fǎng)問(wèn)服務(wù) 414
15.5 發(fā)布和使用Web服務(wù) 416
15.5.1 創(chuàng )建基于Spring的JAX-WS端點(diǎn) 416
15.5.2 在客戶(hù)端代理JAX-WS服務(wù) 419
15.6 小結 421
第16章 使用Spring MVC創(chuàng )建REST API 423
16.1 了解REST 424
16.1.1 REST的基礎知識 424
16.1.2 Spring是如何支持REST的 425
16.2 創(chuàng )建第一個(gè)REST端點(diǎn) 426
16.2.1 協(xié)商資源表述 428
16.2.2 使用HTTP信息轉換器 433
16.3 提供資源之外的其他內容 438
16.3.1 發(fā)送錯誤信息到客戶(hù)端 438
16.3.2 在響應中設置頭部信息 443
16.4 編寫(xiě)REST客戶(hù)端 445
16.4.1 了解RestTemplate的操作 446
16.4.2 GET資源 447
16.4.3 檢索資源 448
16.4.4 抽取響應的元數據 449
16.4.5 PUT資源 450
16.4.6 DELETE資源 451
16.4.7 POST資源數據 452
16.4.8 在POST請求中獲取響應對象 452
16.4.9 在POST請求后獲取資源位置 453
16.4.10 交換資源 454
16.5 小結 456
第17章 Spring消息 457
17.1 異步消息簡(jiǎn)介 458
17.1.1 發(fā)送消息 459
17.1.2 評估異步消息的優(yōu)點(diǎn) 461
17.2 使用JMS發(fā)送消息 463
17.2.1 在Spring中搭建消息代理 463
17.2.2 使用Spring的JMS模板 465
17.2.3 創(chuàng )建消息驅動(dòng)的POJO 474
17.2.4 使用基于消息的RPC 477
17.3 使用AMQP實(shí)現消息功能 479
17.3.1 AMQP簡(jiǎn)介 480
17.3.2 配置Spring支持AMQP消息 481
17.3.3 使用RabbitTemplate發(fā)送消息 484
17.3.4 接收AMQP消息 486
17.4 小結 489
第18章 使用WebSocket和STOMP實(shí)現消息功能 491
18.1 使用Spring的低層級WebSocket API 492
18.2 應對不支持WebSocket的場(chǎng)景 497
18.3 使用STOMP消息 500
18.3.1 啟用STOMP消息功能 501
18.3.2 處理來(lái)自客戶(hù)端的STOMP消息 504
18.3.3 發(fā)送消息到客戶(hù)端 507
18.4 為目標用戶(hù)發(fā)送消息 511
18.4.1 在控制器中處理用戶(hù)的消息 512
18.4.2 為指定用戶(hù)發(fā)送消息 514
18.5 處理消息異?!?15
18.6 小結 516
第19章 使用Spring發(fā)送Email 517
19.1 配置Spring發(fā)送郵件 518
19.1.1 配置郵件發(fā)送器 518
19.1.2 裝配和使用郵件發(fā)送器 520
19.2 構建豐富內容的Email消息 521
19.2.1 添加附件 521
19.2.2 發(fā)送富文本內容的Email 522
19.3 使用模板生成Email 524
19.3.1 使用Velocity構建Email消息 524
19.3.2 使用Thymeleaf構建Email消息 526
19.4 小結 528
第20章 使用JMX管理Spring Bean 529
20.1 將Spring bean導出為MBean 530
20.1.1 通過(guò)名稱(chēng)暴露方法 533
20.1.2 使用接口定義MBean的操作和屬性 535
20.1.3 使用注解驅動(dòng)的MBean 536
20.1.4 處理MBean沖突 538
20.2 遠程MBean 539
20.2.1 暴露遠程MBean 539
20.2.2 訪(fǎng)問(wèn)遠程MBean 540
20.2.3 代理MBean 542
20.3 處理通知 543
20.3.1 監聽(tīng)通知 544
20.4 小結 545
第21章 借助Spring Boot簡(jiǎn)化Spring開(kāi)發(fā) 547
21.1 Spring Boot簡(jiǎn)介 548
21.1.1 添加Starter依賴(lài) 548
21.1.2 自動(dòng)配置 552
21.1.3 Spring Boot CLI 552
21.1.4 Actuator 553
21.2 使用Spring Boot構建應用 553
21.2.1 處理請求 556
21.2.2 創(chuàng )建視圖 558
21.2.3 添加靜態(tài)內容 560
21.2.4 持久化數據 561
21.2.5 嘗試運行 563
21.3 組合使用Groovy與SpringBoot CLI 566
21.3.1 編寫(xiě)Groovy控制器 566
21.3.2 使用Groovy Repository實(shí)現數據持久化 569
21.3.3 運行Spring Boot CLI 570
21.4 通過(guò)Actuator獲取了解應用內部狀況 571
21.5 小結 574