第1篇 基礎篇
第1章 Spring概述 2
1.1 認識Spring 2
1.2 關於SpringSource 4
1.3 Spring帶給我們什麼 5
1.4 Spring體係結構 6
1.5 Spring對Java版本的要求 8
1.6 Spring 4.0新特性 8
1.6.1 全麵支持Java 8.0 9
1.6.2 核心容器的增強 11
1.6.3 支持用Groovy定義Bean 12
1.6.4 Web的增強 12
1.6.5 支持WebSocket 12
1.6.6 測試的增強 13
1.6.7 其他 13
1.7 Spring子項目 13
1.8 如何獲取Spring 15
1.9 小結 16
第2章 快速入門 17
2.1 實例概述 17
2.1.1 比Hello World更適用的實例 18
2.1.2 實例功能簡介 18
2.2 環境準備 20
2.2.1 構建工具Maven 20
2.2.2 創建庫錶 22
2.2.3 建立工程 23
2.2.4 類包及Spring配置文件規劃 28
2.3 持久層 29
2.3.1 建立領域對象 29
2.3.2 UserDao 30
2.3.3 LoginLogDao 33
2.3.4 在Spring中裝配DAO 34
2.4 業務層 35
2.4.1 UserService 35
2.4.2 在Spring中裝配Service 37
2.4.3 單元測試 38
2.5 展現層 40
2.5.1 配置Spring MVC框架 40
2.5.2 處理登錄請求 42
2.5.3 JSP視圖頁麵 44
2.6 運行Web應用 46
2.7 小結 48
第3章 Spring Boot 49
3.1 Spring Boot概覽 49
3.1.1 Spring Boot發展背景 50
3.1.2 Spring Boot特點 50
3.1.3 Spring Boot啓動器 50
3.2 快速入門 52
3.3 安裝配置 54
3.3.1 基於Maven環境配置 54
3.3.2 基於Gradle環境配置 56
3.3.3 基於Spring Boot CLI環境
配置 57
3.3.4 代碼包結構規劃 58
3.4 持久層 59
3.4.1 初始化配置 59
3.4.2 UserDao 61
3.5 業務層 62
3.6 展現層 64
3.6.1 配置pom.xml依賴 64
3.6.2 配置Spring MVC框架 65
3.6.3 處理登錄請求 65
3.7 運維支持 67
3.8 小結 70
第2篇 核心篇
第4章 IoC容器 72
4.1 IoC概述 72
4.1.1 通過實例理解IoC的概念 73
4.1.2 IoC的類型 75
4.1.3 通過容器完成依賴關係的
注入 77
4.2 相關Java基礎知識 78
4.2.1 簡單實例 78
4.2.2 類裝載器ClassLoader 80
4.2.3 Java反射機製 83
4.3 資源訪問利器 85
4.3.1 資源抽象接口 85
4.3.2 資源加載 88
4.4 BeanFactory和ApplicationContext 91
4.4.1 BeanFactory介紹 92
4.4.2 ApplicationContext介紹 94
4.4.3 父子容器 103
4.5 Bean的生命周期 103
4.5.1 BeanFactory中Bean的生命
周期 103
4.5.2 ApplicationContext中Bean
的生命周期 112
4.6 小結 114
第5章 在IoC容器中裝配Bean 115
5.1 Spring配置概述 116
5.1.1 Spring容器高層視圖 116
5.1.2 基於XML的配置 117
5.2 Bean基本配置 120
5.2.1 裝配一個Bean 120
5.2.2 Bean的命名 120
5.3 依賴注入 121
5.3.1 屬性注入 121
5.3.2 構造函數注入 124
5.3.3 工廠方法注入 128
5.3.4 選擇注入方式的考量 130
5.4 注入參數詳解 130
5.4.1 字麵值 130
5.4.2 引用其他Bean 131
5.4.3 內部Bean 133
5.4.4 null值 133
5.4.5 級聯屬性 134
5.4.6 集閤類型屬性 134
5.4.7 簡化配置方式 138
5.4.8 自動裝配 141
5.5 方法注入 142
5.5.1 lookup方法注入 142
5.5.2 方法替換 143
5.6 <bean>之間的關係 144
5.6.1 繼承 144
5.6.2 依賴 145
5.6.3 引用 146
5.7 整閤多個配置文件 147
5.8 Bean作用域 148
5.8.1 singleton作用域 148
5.8.2 prototype作用域 149
5.8.3 與Web應用環境相關的Bean
作用域 150
5.8.4 作用域依賴問題 152
5.9 FactoryBean 153
5.10 基於注解的配置 155
5.10.1 使用注解定義Bean 155
5.10.2 掃描注解定義的Bean 156
5.10.3 自動裝配Bean 157
5.10.4 Bean作用範圍及生命過程
方法 162
5.11 基於Java類的配置 164
5.11.1 使用Java類提供Bean定義
信息 164
5.11.2 使用基於Java類的配置信息
啓動Spring容器 167
5.12 基於Groovy DSL的配置 169
5.12.1 使用Groovy DSL提供Bean
定義信息 169
5.12.2 使用GenericGroovyApplication
Context啓動Spring容器 171
5.13 通過編碼方式動態添加Bean 172
5.13.1 通過DefaultListableBean
Factory 172
5.13.2 擴展自定義標簽 173
5.14 不同配置方式比較 175
5.15 小結 177
第6章 Spring容器高級主題 178
6.1 Spring容器技術內幕 178
6.1.1 內部工作機製 179
6.1.2 BeanDefinition 182
6.1.3 InstantiationStrategy 183
6.1.4 BeanWrapper 183
6.2 屬性編輯器 184
6.2.1 JavaBean的編輯器 185
6.2.2 Spring默認屬性編輯器 188
6.2.3 自定義屬性編輯器 189
6.3 使用外部屬性文件 192
6.3.1 PropertyPlaceholderConfigurer
屬性文件 192
6.3.2 使用加密的屬性文件 195
6.3.3 屬性文件自身的引用 198
6.4 引用Bean的屬性值 199
6.5 國際化信息 201
6.5.1 基礎知識 201
6.5.2 MessageSource 206
6.5.3 容器級的國際化信息資源 209
6.6 容器事件 210
6.6.1 Spring事件類結構 211
6.6.2 解構Spring事件體係的具體
實現 213
6.6.3 一個實例 214
6.7 小結 215
第7章 Spring AOP基礎 216
7.1 AOP概述 216
7.1.1 AOP到底是什麼 217
7.1.2 AOP術語 219
7.1.3 AOP的實現者 221
7.2 基礎知識 222
7.2.1 帶有橫切邏輯的實例 222
7.2.2 JDK動態代理 224
7.2.3 CGLib動態代理 228
7.2.4 AOP聯盟 229
7.2.5 代理知識小結 230
7.3 創建增強類 230
7.3.1 增強類型 230
7.3.2 前置增強 231
7.3.3 後置增強 235
7.3.4 環繞增強 236
7.3.5 異常拋齣增強 237
7.3.6 引介增強 239
7.4 創建切麵 243
7.4.1 切點類型 243
7.4.2 切麵類型 244
7.4.3 靜態普通方法名匹配切麵 246
7.4.4 靜態正則錶達式方法匹配
切麵 248
7.4.5 動態切麵 251
7.4.6 流程切麵 254
7.4.7 復閤切點切麵 256
7.4.8 引介切麵 258
7.5 自動創建代理 259
7.5.1 實現類介紹 259
7.5.2 BeanNameAutoProxyCreator 260
7.5.3 DefaultAdvisorAutoProxy
Creator 261
7.5.4 AOP無法增強疑難問題
剖析 262
7.6 小結 267
第8章 基於@AspectJ和Schema的
AOP 269
8.1 Spring對AOP的支持 269
8.2 Java 5.0注解知識快速進階 270
8.2.1 瞭解注解 270
8.2.2 一個簡單的注解類 271
8.2.3 使用注解 272
8.2.4 訪問注解 273
8.3 著手使用@AspectJ 274
8.3.1 使用前的準備 275
8.3.2 一個簡單的例子 275
8.3.3 如何通過配置使用@AspectJ
切麵 277
8.4 @AspectJ語法基礎 278
8.4.1 切點錶達式函數 278
8.4.2 在函數入參中使用通配符 279
8.4.3 邏輯運算符 280
8.4.4 不同增強類型 281
8.4.5 引介增強用法 282
8.5 切點函數詳解 283
8.5.1 @annotation() 284
8.5.2 execution() 285
8.5.3 args()和@args() 287
8.5.4 within() 288
8.5.5 @within()和@target() 289
8.5.6 target()和this() 290
8.6 @AspectJ進階 291
8.6.1 切點復閤運算 292
8.6.2 命名切點 292
8.6.3 增強織入的順序 294
8.6.4 訪問連接點信息 294
8.6.5 綁定連接點方法入參 295
8.6.6 綁定代理對象 297
8.6.7 綁定類注解對象 298
8.6.8 綁定返迴值 299
8.6.9 綁定拋齣的異常 299
8.7 基於Schema配置切麵 300
8.7.1 一個簡單切麵的配置 300
8.7.2 配置命名切點 302
8.7.3 各種增強類型的配置 303
8.7.4 綁定連接點信息 305
8.7.5 Advisor配置 306
8.8 混閤切麵類型 307
8.8.1 混閤使用各種切麵類型 308
8.8.2 各種切麵類型總結 308
8.9 其他 309
8.9.1 JVM Class文件字節碼轉換
基礎知識 309
8.9.2 使用LTW織入切麵 311
8.10 小結 314
第9章 Spring SpEL 316
9.1 JVM動態語言 316
9.2 SpEL錶達式概述 318
9.3 SpEL核心接口 319
9.3.1 EvaluationContext接口 320
9.3.2 SpEL編譯器 321
9.4 SpEL基礎錶達式 323
9.4.1 文本字符解析 323
9.4.2 對象屬性解析 323
9.4.3 數組、集閤類型解析 324
9.4.4 方法解析 326
9.4.5 操作符解析 327
9.4.6 安全導航操作符 329
9.4.7 三元操作符 330
9.4.8 Elvis操作符 331
9.4.9 賦值、類型、構造器、變量 332
9.4.10 集閤過濾 335
9.4.11 集閤轉換 335
9.5 在Spring中使用SpEL 336
9.5.1 基於XML的配置 336
9.5.2 基於注解的配置 337
9.6 小結 338
第3篇 數據篇
第10章 Spring對DAO的支持 340
10.1 Spring的DAO理念 340
10.2 統一的異常體係 341
10.2.1 Spring的DAO異常體係 341
10.2.2 JDBC的異常轉換器 343
10.2.3 其他持久化技術的異常
轉換器 344
10.3 統一數據訪問模闆 344
10.3.1 使用模闆和迴調機製 345
10.3.2 Spring為不同持久化技術
所提供的模闆類 347
10.4 數據源 348
10.4.1 配置一個數據源 348
10.4.2 獲取JNDI數據源 352
10.4.3 Spring的數據源實現類 353
10.5 小結 353
第11章 Spring的事務管理 355
11.1 數據庫事務基礎知識 355
11.1.1 何為數據庫事務 356
11.1.2 數據並發的問題 357
11.1.3 數據庫鎖機製 359
11.1.4 事務隔離級彆 360
11.1.5 JDBC對事務的支持 361
11.2 ThreadLocal基礎知識 362
11.2.1 ThreadLocal是什麼 363
11.2.2 ThreadLocal的接口方法 363
11.2.3 一個TheadLocal實例 364
11.2.4 與Thread同步機製的比較 366
11.2.5 Spring使用ThreadLocal解決
綫程安全問題 366
11.3 Spring對事務管理的支持 368
11.3.1 事務管理關鍵抽象 369
11.3.2 Spring的事務管理器實現類 371
11.3.3 事務同步管理器 374
11.3.4 事務傳播行為 375
11.4 編程式的事務管理 376
11.5 使用XML配置聲明式事務 377
11.5.1 一個將被實施事務增強的
服務接口 379
11.5.2 使用原始的TransactionProxy
FactoryBean 379
11.5.3 基於aop/tx命名空間的配置 382
11.6 使用注解配置聲明式事務 385
11.6.1 使用@Transactional注解 385
11.6.2 通過AspectJ LTW引入事務
切麵 389
11.7 集成特定的應用服務器 390
11.7.1 BEA WebLogic 390
11.7.2 WebSphere 390
11.8 小結 390
第12章 Spring的事務管理難點剖析 392
12.1 DAO和事務管理的牽絆 393
12.1.1 JDBC訪問數據庫 393
12.1.2 Hibernate訪問數據庫 395
12.2 應用分層的迷惑 398
12.3 事務方法嵌套調用的迷茫 401
12.3.1 Spring事務傳播機製迴顧 401
12.3.2 相互嵌套的服務方法 402
12.4 多綫程的睏惑 405
12.4.1 Spring通過單實例化Bean
簡化多綫程問題 405
12.4.2 啓動獨立綫程調用事務
方法 405
12.5 聯閤軍種作戰的混亂 408
12.5.1 Spring事務管理器的應對 408
12.5.2 Hibernate+Spring JDBC
混閤框架的事務管理 408
12.6 特殊方法成漏網之魚 412
12.6.1 哪些方法不能實施Spring
AOP事務 412
12.6.2 事務增強遺漏實例 413
12.7 數據連接泄露 416
12.7.1 底層連接資源的訪問問題 416
12.7.2 Spring JDBC數據連接泄露 417
12.7.3 事務環境下通過DataSource
Utils獲取數據連接 420
12.7.4 無事務環境下通過DataSource
Utils獲取數據連接 422
12.7.5 JdbcTemplate如何做到對連接
泄露的免疫 424
12.7.6 使用TransactionAwareData
SourceProxy 425
12.7.7 其他數據訪問技術的等價類 426
12.8 小結 426
第13章 使用Spring JDBC訪問
數據庫 428
13.1 使用Spring JDBC 428
13.1.1 JdbcTemplate小試牛刀 429
13.1.2 在DAO中使用Jdbc
Template 429
13.2 基本的數據操作 431
13.2.1 更改數據 431
13.2.2 返迴數據庫的錶自增主鍵值 434
13.2.3 批量更改數據 436
13.2.4 查詢數據 437
13.2.5 查詢單值數據 440
13.2.6 調用存儲過程 442
13.3 BLOB/CLOB類型數據的操作 444
13.3.1 如何獲取本地數據連接 445
13.3.2 相關的操作接口 446
13.3.3 插入LOB類型的數據 448
13.3.4 以塊數據方式讀取LOB
數據 450
13.3.5 以流數據方式讀取LOB
數據 451
13.4 自增鍵和行集 452
13.4.1 自增鍵的使用 452
13.4.2 如何規劃主鍵方案 454
13.4.3 以行集返迴數據 456
13.5 NamedParameterJdbcTemplate
模闆類 456
13.6 小結 459
第14章 整閤其他ORM框架 460
14.1 Spring整閤ORM技術 460
14.2 在Spring中使用Hibernate 462
14.2.1 配置SessionFactory 462
14.2.2 使用HibernateTemplate 465
14.2.3 處理LOB類型的數據 469
14.2.4 添加Hibernate事件監聽器 470
14.2.5 使用原生的Hibernate API 471
14.2.6 使用注解配置 472
14.2.7 事務處理 474
14.2.8 延遲加載問題 475
14.3 在Spring中使用MyBatis 476
14.3.1 配置SqlMapClient 476
14.3.2 在Spring中配置MyBatis 478
14.3.3 編寫MyBatis的DAO 479
14.4 DAO層設計 482
14.4.1 DAO基類設計 482
14.4.2 查詢接口方法設計 484
14.4.3 分頁查詢接口設計 486
14.5 小結 487
第4篇 應用篇
第15章 Spring Cache 490
15.1 緩存概述 490
15.1.1 緩存的概念 490
15.1.2 使用Spring Cache 493
15.2 掌握Spring Cache抽象 498
15.2.1 緩存注解 498
15.2.2 緩存管理器 504
15.2.3 使用SpEL錶達式 506
15.2.4 基於XML的Cache聲明 506
15.2.5 以編程方式初始化緩存 507
15.2.6 自定義緩存注解 509
15.3 配置Cache存儲 509
15.3.1 EhCache 510
15.3.2 Guava 510
15.3.3 HazelCast 511
15.3.4 GemFire 511
15.3.5 JSR-107 Cache 511
15.4 實戰經驗 513
15.5 小結 514
第16章 任務調度和異步執行器 516
16.1 任務調度概述 516
16.2 Quartz快速進階 517
16.2.1 Quartz基礎結構 518
16.2.2 使用SimpleTrigger 520
16.2.3 使用CronTrigger 522
16.2.4 使用Calendar 526
16.2.5 任務調度信息存儲 527
16.3 在Spring中使用Quartz 530
16.3.1 創建JobDetail 530
16.3.2 創建Trigger 533
16.3.3 創建Scheduler 534
16.4 在Spring中使用JDK Timer 536
16.4.1 Timer和TimerTask 536
16.4.2 Spring對Java Timer的支持 539
16.5 Spring對Java 5.0 Executor的
支持 540
16.5.1 瞭解Java 5.0的Executor 541
16.5.2 Spring對Executor所提供的
抽象 543
16.6 實際應用中的任務調度 544
16.6.1 如何産生任務 545
16.6.2 任務調度對應用程序集群的
影響 547
16.6.3 任務調度雲 547
16.6.4 Web應用程序中調度器的
啓動和關閉問題 549
16.7 小結 552
第17章 Spring MVC 553
17.1 Spring MVC體係概述 554
17.1.1 體係結構 554
17.1.2 配置DispatcherServlet 555
17.1.3 一個簡單的實例 560
17.2 注解驅動的控製器 565
17.2.1 使用@RequestMapping
映射請求 565
17.2.2 請求處理方法簽名 569
17.2.3 使用矩陣變量綁定參數 570
17.2.4 請求處理方法簽名詳細說明 571
17.2.5 使用HttpMessageConverter
<T> 575
17.2.6 使用@RestController和AsyncRestTemplate 584
17.2.7 處理模型數據 586
17.3 處理方法的數據綁定 591
17.3.1 數據綁定流程剖析 592
17.3.2 數據轉換 592
17.3.3 數據格式化 598
17.3.4 數據校驗 602
17.4 視圖和視圖解析器 611
17.4.1 認識視圖 611
17.4.2 認識視圖解析器 612
17.4.3 JSP和JSTL 613
17.4.4 模闆視圖 618
17.4.5 Excel 621
17.4.6 PDF 623
17.4.7 輸齣XML 625
17.4.8 輸齣JSON 626
17.4.9 使用XmlViewResolver 626
17.4.10 使用ResourceBundleView
Resolver 627
17.4.11 混閤使用多種視圖技術 628
17.5 本地化解析 630
17.5.1 本地化的概念 630
17.5.2 使用CookieLocaleResolver 631
17.5.3 使用SessionLocaleResolver 632
17.5.4 使用LocaleChange
Interceptor 632
17.6 文件上傳 633
17.6.1 配置MultipartResolver 633
17.6.2 編寫控製器和文件上傳錶單
頁麵 633
17.7 WebSocket支持 634
17.7.1 使用WebSocket 634
17.7.2 WebSocket的限製 638
17.8 雜項 639
17.8.1 靜態資源處理 639
17.8.2 裝配攔截器 643
17.8.3 異常處理 644
17.8.4 RequestContextHolder的
使用 646
17.9 小結 646
第18章 實戰案例開發 648
18.1 論壇案例概述 648
18.1.1 論壇整體功能結構 648
18.1.2 論壇用例描述 649
18.1.3 主要功能流程描述 651
18.2 係統設計 655
18.2.1 技術框架選擇 655
18.2.2 采用Maven構建項目 656
18.2.3 單元測試類包結構規劃 657
18.2.4 係統架構圖 658
18.2.5 PO類設計 658
18.2.6 持久層設計 659
18.2.7 服務層設計 660
18.2.8 Web層設計 661
18.2.9 數據庫設計 662
18.3 開發前的準備 663
18.4 持久層開發 664
18.4.1 PO類 664
18.4.2 DAO基類 666
18.4.3 通過擴展基類定義DAO類 670
18.4.4 DAO Bean的裝配 672
18.4.5 使用Hibernate二級緩存 673
18.5 對持久層進行測試 675
18.5.1 配置Unitils測試環境 675
18.5.2 準備測試數據庫及測試
數據 676
18.5.3 編寫DAO測試基類 677
18.5.4 編寫BoardDao測試用例 678
18.6 服務層開發 680
18.6.1 UserService的開發 680
18.6.2 ForumService的開發 681
18.6.3 服務類Bean的裝配 683
18.7 對服務層進行測試 684
18.7.1 編寫Service測試基類 685
18.7.2 編寫ForumService測試
用例 685
18.8 Web層開發 687
18.8.1 BaseController的基類 687
18.8.2 用戶登錄和注銷 689
18.8.3 用戶注冊 691
18.8.4 論壇管理 692
18.8.5 論壇普通功能 694
18.8.6 分頁顯示論壇版塊的主題
帖子 696
18.8.7 web.xml配置 700
18.8.8 Spring MVC配置 702
18.9 對Web層進行測試 703
18.9.1 編寫Web測試基類 703
18.9.2 編寫ForumManageController
測試用例 704
18.10 開發環境部署 705
18.11 項目配置實戰經驗 708
18.11.1 “傳統的”Web項目屬性
文件 708
18.11.2 如何規劃便於部署的Web
項目屬性文件 709
18.11.3 數據源的配置 710
18.12 小結 712
第5篇 提高篇
第19章 Spring OXM 714
19.1 認識XML解析技術 714
19.1.1 什麼是XML 714
19.1.2 XML的處理技術 715
19.2 XML處理利器:XStream 717
19.2.1 XStream概述 717
19.2.2 快速入門 718
19.2.3 使用XStream彆名 720
19.2.4 XStream轉換器 721
19.2.5 XStream注解 723
19.2.6 流化對象 725
19.2.7 持久化API 726
19.2.8 額外功能:處理JSON 727
19.3 其他常見的O/X Mapping開源
項目 729
19.3.1 JAXB 729
19.3.2 Castor 733
19.3.3 JiBX 738
19.3.4 總結比較 741
19.4 與Spring OXM整閤 742
19.4.1 Spring OXM概述 742
19.4.2 整閤OXM實現者 744
19.4.3 如何在Spring中進行配置 744
19.4.4 Spring OXM簡單實例 747
19.5 小結 749
第20章 實戰型單元測試 750
20.1 單元測試概述 751
20.1.1 為什麼需要單元測試 751
20.1.2 單元測試之誤解 752
20.1.3 單元測試之睏境 754
20.1.4 單元測試基本概念 755
20.2 TestNG快速進階 757
20.2.1 TestNG概述 757
20.2.2 TestNG生命周期 758
20.2.3 使用TestNG 758
20.3 模擬利器Mockito 763
20.3.1 模擬測試概述 763
20.3.2 創建Mock對象 763
20.3.3 設定Mock對象的期望行為
及返迴值 764
20.3.4 驗證交互行為 766
20.4 測試整閤之王Unitils 767
20.4.1 Unitils概述 767
20.4.2 集成Spring 770
20.4.3 集成Hibernate 773
20.4.4 集成DbUnit 774
20.4.5 自定義擴展模塊 775
20.5 使用Unitils測試DAO層 776
20.5.1 數據庫測試的難點 776
20.5.2 擴展DbUnit用Excel準備
數據 776
20.5.3 測試實戰 779
20.6 使用Unitils測試Service層 789
20.7 測試Web層 794
20.7.1 對LoginController進行單元
測試 794
20.7.2 使用Spring Servlet API模擬
對象 795
20.7.3 使用Spring RestTemplate
測試 797
20.8 小結 798
· · · · · · (
收起)