第壹部分 Spring入門
第1章 Spring簡介 2
1.1 Spring是什麽 2
1.1.1 依賴註入之外的特性 4
1.1.2 使用Spring進行面向方面編程 4
1.1.3 數據訪問 5
1.1.4 簡化與整合Java EE 5
1.1.5 基於Spring的任務調度 6
1.1.6 Spring對郵件的支持 6
1.1.7 動態語言 6
1.1.8 遠程訪問 6
1.1.9 事務管理 7
1.1.10 Spring MVC框架 7
1.1.11 Spring Web Flow 7
1.1.12 AJAX技術 7
1.1.13 國際化 8
1.1.14 簡化異常處理 8
1.2 Spring項目 8
1.2.1 Spring的起源 8
1.2.2 Spring .NET 8
1.2.3 Spring IDE 9
1.2.4 Spring安全系統(原Acegi) 9
1.2.5 Spring的替代方案 9
1.3 示例代碼 10
1.4 小結 10
第2章 Spring入門 11
2.1 獲取Spring框架 11
2.1.1 從CVS上簽出Spring 11
2.1.2 從源碼構建Spring 12
2.1.3 檢查Spring發布包 13
2.1.4 Spring發布包 13
2.1.5 Spring依賴的包 14
2.1.6 示例應用 16
2.1.7 配置Spring和IDE 18
2.2 HelloWorld示例 20
2.3 Spring版本的“Hello, World”示例 23
2.3.1 依賴註入 24
2.3.2 Spring的侵入性 26
2.4 小結 26
第3章 控制反轉 27
3.1 控制反轉和依賴註入 27
3.2 控制反轉的類型 27
3.2.1 上下文依賴查找 29
3.2.2 構造方法依賴註入 30
3.2.3 設置方法依賴註入 31
3.2.4 依賴註入與依賴查找 32
3.2.5 設置方法註入與構造方法註入 33
3.3 Spring中的控制反轉 34
3.4 基於Spring的依賴註入 34
3.4.1 bean和BeanFactory 34
3.4.2 BeanFactory實現 35
3.4.3 XML bean定義 36
3.4.4 構造方法註入 37
3.4.5 註入參數 40
3.4.6 理解bean的命名 50
3.4.7 bean的實例化模式 52
3.4.8 解析依賴 55
3.4.9 bean的自動裝配 57
3.4.10 依賴檢查 61
3.4.11 bean的繼承 62
3.5 小結 64
第4章 進階 66
4.1 Spring對應用程序可移植性的影響 67
4.2 管理bean的生命周期 67
4.2.1 嵌入bean的創建 68
4.2.2 嵌入bean的銷毀 74
4.3 讓bean可被Spring感知 79
4.3.1 使用BeanNameAware接口 80
4.3.2 使用BeanFactoryAware接口 81
4.4 使用方法註入(method injection) 83
4.4.1 查找方法註入 83
4.4.2 方法替換 88
4.5 使用FactoryBean接口 91
4.5.1 MessageDigestFactoryBean類 91
4.5.2 直接訪問FactoryBean 94
4.6 BeanFactoryPostProcessor類 94
4.7 JavaBean的屬性修改器 101
4.7.1 內建的PropertyEditor 101
4.7.2 創建自定義PropertyEditor 104
4.8 BeanPostProcessor類 108
4.8.1 實現壹個BeanPostProcessor 110
4.8.2 使用BeanPostProcessor類的實機選擇 114
4.9 Spring ApplicationContext 115
4.9.1 ApplicationContext的實現類 115
4.9.2 使用ApplicationContext-Aware 116
4.9.3 控制bean的初始化 117
4.9.4 使用基於註解的配置 118
4.9.5 使用MessageSource進行國際化 123
4.9.6 在獨立應用中使用MessageSource 130
4.9.7 MessageSourceResolvable接口 130
4.9.8 使用應用程序事件 130
4.9.9 對於事件用法的考慮 132
4.9.10 訪問資源 133
4.10 小結 134
第5章 Spring AOP基礎 135
5.1 AOP概念 136
5.2 AOP的類型 136
5.2.1 靜態AOP 137
5.2.2 動態AOP 137
5.2.3 選擇壹種AOP類型 137
5.3 Spring中的AOP 137
5.3.1 AOP聯盟 138
5.3.2 AOP的Hello World 138
5.3.3 Spring AOP架構 140
5.3.4 ProxyFactory類 140
5.3.5 在Spring中創建通知 141
5.4 Spring裏的通知者和切入點 155
5.4.1 切入點接口 156
5.4.2 使用ComposablePointcut 172
5.4.3 切入點總結 175
5.5 代理詳解 176
5.5.1 理解代理 176
5.5.2 使用JDK動態代理 176
5.5.3 使用CGLIB代理 177
5.5.4 兩者的性能比較 177
5.5.5 選用代理 180
5.6 小結 180
第6章 AOP進階 182
6.1 @AspectJ註解 182
6.2 @AspectJ方面詳解 186
6.2.1 切入點 186
6.2.2 切入點表達式 189
6.2.3 探討切入點表達式 191
6.2.4 在XML中使用@Pointcuts 194
6.2.5 通知的類型 194
6.2.6 參數綁定 201
6.2.7 引入 202
6.2.8 方面的生命周期 208
6.3 AOP的框架服務 209
6.3.1 使用AOP命名空間創建第壹個方面 209
6.3.2 AOP命名空間中的切入點 211
6.3.3 使用AOP命名空間創建通知 212
6.3.4 AOP命名空間中的引入 217
6.4 風格選擇 219
6.5 使用Spring AOP代理 220
6.6 AspectJ集成 225
6.6.1 創建第壹個AspectJ方面 225
6.6.2 編譯示例程序 227
6.6.3 AspectJ方面的作用域 229
6.7 加載時織入 230
6.7.1 第壹個加載時織入示例 230
6.7.2 LoadTimeWeaver的查找策略 232
6.8 AOP實踐 232
6.9 小結 235
第7章 Spring schema與命名空間 236
7.1 新配置的緣由 236
7.2 Spring 2.5包含的schema 238
7.2.1 beans schema 238
7.2.2 上下文schema 239
7.2.3 util schema 239
7.2.4 tx schema 242
7.2.5 aop schema 242
7.2.6 jee schema 242
7.2.7 lang schema 243
7.3 schema背後 244
7.4 自定義schema 246
7.5 IDE配置 249
7.6 小結 252
第8章 Spring模式 253
8.1 目錄結構 253
8.1.1 簡單應用 253
8.1.2 復雜應用 255
8.1.3 打包和命名 255
8.2 設計模式簡介 255
8.2.1 面向接口編程 256
8.2.2 創建模式 256
8.2.3 結構模式 260
8.2.4 行為模式 262
8.3 Spring應用模式 264
8.3.1 分層設計 265
8.3.2 高性能分頁 266
8.3.3 多錯誤報告 268
8.3.4 用戶界面事務 271
8.3.5 後臺進程 274
8.3.6 郵件通知 278
8.3.7 錯誤收集和日誌 280
8.4 小結 283
第二部分 數據訪問
第9章 Spring對JDBC的支持 286
9.1 JDBC的主要概念 286
9.1.1 使用DriverManager和Connection 288
9.1.2 使用PreparedStatement 289
9.1.3 使用CallableStatement類 292
9.1.4 其他JDBC概念 293
9.2 Spring對數據訪問支持的概念 293
9.3 Spring對JDBC數據訪問的支持 294
9.4 使用JdbcTemplate類 294
9.4.1 JdbcTemplate類的execute方法 296
9.4.2 JdbcTemplate類的query方法和該方法的擴展 299
9.4.3 JdbcTemplat類的update方法 303
9.4.4 JdbcTemplate類的batchUpdate方法 304
9.5 RdbmsOperation子類 305
9.5.1 SqlUpdate子類 306
9.5.2 BatchSqlUpdate子類 311
9.5.3 SqlCall類和StoredProcedure子類 312
9.5.4 SqlQuery類和它的子類 314
9.5.5 JdbcTemplate類和RdbmsOperation類的比較 321
9.6 大二進制對象 321
9.7 JdbcDaoSupport類 324
9.8 簡單的Spring JDBC 326
9.8.1 SimpleJdbcTemplate類 326
9.8.2 SimpleJdbcCall類 329
9.8.3 SimpleJdbcInsert類 331
9.8.4 SimpleJdbcDaoSupport類 332
9.9 小結 333
第10章 集成iBATIS 334
10.1 iBATIS簡述 334
10.1.1 iBATIS版本 334
10.1.2 基礎架構和配置 335
10.2 映射文件 335
10.2.1 sqlMap文件 337
10.2.2 配置iBATIS和Spring 339
10.3 查詢數據 341
10.3.1 簡單查詢操作 341
10.3.2 壹對壹查詢操作 344
10.3.3 壹對多查詢操作 348
10.3.4 多對多查詢操作 350
10.4 更新數據 350
10.5 刪除數據 353
10.6 插入數據 354
10.7 iBATIS缺少的特性 356
10.8 整體性能 357
10.9 小結 358
第11章 Spring對Hibernate的支持 359
11.1 Hibernate入門 359
11.2 Hibernate打包 360
11.3 Hibernate支持的介紹 361
11.3.1 使用Hibernate Session 363
11.3.2 使用HibernateDaoSupport類 366
11.3.3 HibernateTemplate和Session間的選擇 368
11.4 在企業級應用程序中使用Hibernate 372
11.4.1 阻止更新臟數據 372
11.4.2 對象等價性 375
11.4.3 事務支持 378
11.4.4 延遲加載 382
11.5 處理大數據集 392
11.6 處理大對象 394
11.7 使用Hibernate處理其他DAO代碼 397
11.8 小結 398
第三部分 企業級應用組件
第12章 基於Spring的任務調度 400
12.1 使用JDK Timer調度任務 401
12.1.1 Timer觸發器類型 401
12.1.2 創建壹個簡單任務 401
12.1.3 Spring對JDK Timer調度的支持 404
12.2 使用OpenSymphony Quartz來調度任務 409
12.2.1 Quartz簡介 410
12.2.2 Spring對Quartz的支持 418
12.3 任務調度時需考慮的因素 423
12.3.1 選擇壹個調度器 423
12.3.2 剝離Job類中的任務邏輯 424
12.3.3 任務執行和線程池 424
12.4 小結 428
第13章 Spring的郵件支持 429
13.1 Spring Mail API結構 430
13.2 發送簡單的電子郵件 430
13.2.1 編程式構造和發送電子郵件 431
13.2.2 聲明式構造電子郵件 433
13.3 構造並發送MIME消息 436
13.3.1 發送基本的HTML消息 438
13.3.2 發送帶有內嵌圖片的HTML消息 439
13.3.3 發送帶有附件的消息 441
13.3.4 發送帶有可替換純文本的HTML消息 442
13.3.5 發送復雜MIME消息 445
13.4 深入了解企業級電子郵件處理 449
13.5 小結 458
第14章 動態語言 459
14.1 支持的動態語言概覽 459
14.1.1 BeanShell 459
14.1.2 Groovy 461
14.1.3 JRuby 462
14.2 使用動態語言定義Spring bean 463
14.2.1 動態語言支持的幕後 465
14.2.2 代理動態語言bean 466
14.2.3 性能 466
14.3 可刷新bean(refreshable bean) 468
14.4 基於BeanShell的bean 470
14.5 基於JRuby的bean 472
14.6 基於Groovy的bean 473
14.7 動態語言在Spring程序中的典型應用 473
14.8 小結 477
第四部分 Java EE 5應用開發
第15章 Spring遠程訪問 480
15.1 Spring Remoting架構 481
15.2 遠程方法調用 482
15.2.1 開放任意的服務 482
15.2.2 通過代理訪問RMI服務 484
15.2.3 開放CORBA服務 486
15.2.4 訪問CORBA服務 488
15.3 使用JAX-RPC實現Web服務 490
15.3.1 Apache Axis簡介 490
15.3.2 使用ServletEndpoint- Support創建Web服務 490
15.3.3 使用代理訪問RPC風格的Web服務 494
15.3.4 與Axis服務的JavaBean交互 497
15.4 使用JAX-WS Web服務 500
15.4.1 通過SimpleJaxWsService-Exporter公開Web服務 501
15.4.2 使用XFire公開Web服務 501
15.4.3 訪問JAX-WS Web服務 503
15.4.4 從其他客戶端訪問Java Web服務 504
15.5 使用HTTP Invoker創建Web服務 507
15.5.1 開發簡單服務 508
15.5.2 通過代理訪問HTTP Invoker服務 510
15.5.3 在HTTP Invoker服務中使用任意對象 511
15.5.4 使用HTTP基本認證 513
15.6 遠程架構的選擇 516
15.7 小結 517
第16章 事務管理 518
16.1 Spring事務抽象層簡介 518
16.2 分析事務屬性 519
16.2.1 探索TransactionDefinition接口 519
16.2.2 使用TransactionStatus接口 520
16.2.3 PlatformTransactionManager的實現 521
16.3 對壹個事務管理示例的探索 521
16.4 編程式事務管理 529
16.4.1 使用TransactionTemplate類 531
16.4.2 編程式事務管理小結 532
16.5 聲明性事務管理 532
16.5.1 使用TransactionProxy-FactoryBean 532
16.5.2 在事務管理中使用代理的含義 534
16.6 AOP事務管理 535
16.6.1 使用基於註解的AOP事務管理 535
16.6.2 使用XML AOP事務管理 537
16.6.3 tx:advice標簽簡介 538
16.6.4 XML AOP小結 539
16.7 在多個事務性資源上使用事務 540
16.8 實現妳自己的事務同步 541
16.9 小結 548
第17章 基於Spring MVC的Web應用開發 549
17.1 MVC架構 549
17.2 Spring MVC介紹 550
17.3 使用處理器映射 551
17.4 Spring控制器 553
17.4.1 AbstractController類 554
17.4.2 ParameterizableView-Controller類 555
17.4.3 MultiActionController類 555
17.5 攔截器 558
17.6 視圖、本地化和主題 559
17.6.1 以編程的方式使用視圖 559
17.6.2 使用視圖解析器 561
17.6.3 使用本地化消息 565
17.6.4 使用Locale 565
17.6.5 使用主題 565
17.7 命令控制器 567
17.7.1 使用表單控制器 568
17.7.2 探索AbstractWizardForm- Controller 類 574
17.7.3 文件上傳 578
17.8 處理異常 581
17.9 Spring與其他Web技術 583
17.9.1 使用JSP 583
17.9.2 使用Velocity 600
17.9.3 FreeMarker 604
17.9.4 使用XSLT視圖 608
17.9.5 使用PDF視圖 609
17.9.6 實現PDF視圖 610
17.9.7 使用Excel視圖 611
17.9.8 使用Tiles 613
17.9.9 JasperReports報表引擎 623
17.10 Spring的約定優於配置 627
17.10.1 控制器約定 628
17.10.2 MultiActionController約定 628
17.10.3 模型約定 629
17.10.4 視圖約定 630
17.11 使用註解配置控制器 631
17.11.1 @Controller註解 631
17.11.2 @RequestMapping註解 632
17.11.3 @RequestParam註解 633
17.11.4 @ModelAttribute註解 633
17.11.5 使用註解配置命令控制器 634
17.12 小結 635
第18章 Spring Web Flow 636
18.1 Spring Web Flow簡介 637
18.1.1 核心概念 637
18.1.2 獲取Spring Web Flow 640
18.1.3 Spring Web Flow依賴 642
18.2 Hello, Web Flow! 642
18.3 探索狀態 646
18.3.1 view狀態 647
18.3.2 decision狀態 647
18.3.3 end狀態 648
18.4 處理轉換 648
18.5 高級概念 650
18.5.1 表達式語言和範圍 650
18.5.2 實現action 653
18.5.3 模型數據綁定 654
18.5.4 局部視圖刷新 658
18.5.5 映射流的輸入與輸出參數 658
18.5.6 使用子流 659
18.6 幕後的Spring Web Flow 660
18.6.1 流執行架構 660
18.6.2 流執行者 662
18.6.3 流定義註冊表 662
18.6.4 流執行倉庫 665
18.7 集成Spring MVC 666
18.7.1 流處理 666
18.7.2 視圖解析 667
18.8 使用Spring Security構建安全的流 668
18.8.1 第壹步:添加SecurityFlow- ExecutionListener 668
18.8.2 第二步:處理基本的認證和授權 668
18.8.3 第三步:在流定義中定義安全規則 670
18.9 問題解決 672
18.9.1 帶狀態的導航控制 672
18.9.2 瀏覽器導航欄支持和雙提交(double submit) 672
18.10 測試流定義 673
18.11 小結 674
第19章 Spring與AJAX 675
19.1 DWR 675
19.2 安裝DWR 676
19.3 針對DWR的Spring配置 676
19.4 關於完整示例 677
19.5 測試DWR配置 682
19.6 運行完整示例 682
19.7 DWR腳本基礎 683
19.7.1 使用簡單的回調函數 683
19.7.2 調用元數據對象 684
19.8 engine.js文件 684
19.8.1 調用批處理 684
19.8.2 調用順序 684
19.8.3 錯誤和警告處理 684
19.9 util.js腳本 685
19.10 DWR的安全性 685
19.11 DWR的優缺點 686
19.12 小結 687
第20章 使用Spring JMX 688
20.1 JMX進階 688
20.2 開放Java Bean 689
20.2.1 MBeanExporter類 689
20.2.2 MBeanServer FactoryBean類 691
20.2.3 在已有的MBean服務器上開放Bean 692
20.2.4 Bean註冊行為 692
20.3 控制對象名 693
20.4 控制管理接口 693
20.4.1 MBeanInfoAssembler接口 693
20.4.2 MethodNameBasedMBean-InfoAssembler接口 694
20.4.3 用Java接口來控制管理接口 696
20.4.4 使用源碼級元數據 698
20.5 遠程使用Spring JMX 701
20.5.1 開放遠程MBean 701
20.5.2 訪問遠程MBean 702
20.5.3 代理MBean 702
20.6 Spring JMX通知 703
20.6.1 通知監聽器 703
20.6.2 發布通知 704
20.7 小結 708
第21章 使用Spring進行測試 709
21.1 進行單元測試 709
21.2 單元測試 711
21.3 集成測試 715
21.3.1 使用AbstractSpring- ContextTests 722
21.3.2 使用AbstractDependency- InjectionSpringContext-Tests類 723
21.3.3 使用AbstractTransac-tionalSpringContextTest 726
21.3.4 使用AbstractAnnotation-AwareTransactionalTest 728
21.3.5 JNDI 731
21.4 Spring TestContext Framework 733
21.4.1 應用上下文及使用TestContext Framework進行依賴註入 733
21.4.2 使用TestContext Framework進行依賴註入 735
21.4.3 TestContext Framework中的事務 736
21.4.4 支持類 738
21.5 測試覆蓋 740
21.6 小結 740
第22章 Spring性能調優 741
22.1 性能與響應 741
22.2 探索企業應用的性能問題 741
22.3 測量Java EE應用的性能 742
22.3.1 測量目標 742
22.3.2 確定必要的數據集 747
22.3.3 改善數據訪問層 748
22.3.4 提高事務管理 757
22.3.5 控制遠程調用的性能 758
22.3.6 了解視圖性能 758
22.4 使用緩存 759
22.5 性能測試 760
22.6 監控應用程序的狀態和性能 762
22.7 更多的性能調優資源 764
22.8 小結 764