第1篇 综述 3
第1章 JavaEE5 3
1.1JavaEE5引入的新特性 3
1.2进入EJB3.0时代 6
1.3JavaEE开发模型的局限性 8
1.4小结 10
第2章 步入Spring2.5 11
2.1挑战JavaEE5开发模型 11
2.1.1轻量级开发模型 12
2.1.2倡导敏捷开发 15
2.1.3Spring2.5的架构价值 16
2.2有所为和有所不为 18
2.2.1Spring2.5提供的功能 18
2.2.2排除在外 20
2.3Spring2.5时代的到来 21
2.4小结 22
第3章 获得Spring2.5发布版和源码 23
3.1获得Spring2.5持续发布版 23
3.2获得持续更新的Spring项目源码 25
3.3小结 26
第4章 启动Spring2.5使能项目 27
4.1开发平台的搭建 27
4.1.1JDK的安装及设置 27
4.1.2选用EclipseIDE和WTP 28
4.1.3借助插件调试Web应用 28
4.1.4获取及安装SpringIDE 30
4.2SpringIDE的使用 30
4.3小结 34
第2篇 Spring2.5核心技术 37
第5章 控制反转容器 37
5.1有关DI容器的背景知识 37
5.2BeanFactory和ApplicationContext 38
5.3宿主DI容器配置元数据的不同方式 39
5.3.1基于XML的DI容器配置元数据 39
5.3.2基于注解的DI容器配置元数据 42
5.4基于泛型访问DI容器 43
5.5支持的不同依赖注入类型 44
5.5.1设值注入 44
5.5.2构建器注入 45
5.5.3属性注入 47
5.5.4方法注入 48
5.6Autowiring策略 52
5.6.1autowire属性 52
5.6.2〈bean/〉元素的dependency-check属性 54
5.6.3@Required注解 55
5.6.4@Autowired注解 56
5.6.5细粒度控制Autowiring策略 58
5.6.6借用〈context:annotation-config/〉元素 61
5.7善待depends-on属性 61
5.8抽象和子Bean定义 63
5.9别名(Alias) 64
5.10外在化应用参数的配置 65
5.10.1〈context:property-placeholder/〉元素 65
5.10.2〈context:property-override/〉元素 66
5.11受管Bean的作用范围 67
5.11.1单例和原型 67
5.11.2仅仅适合于Web环境的三种作用范围 69
5.12在Web应用中使用DI容器 72
5.12.1往Web应用中加载DI容器 73
5.12.2复合多个配置文件 74
5.12.3于Web应用中操控DI容器 75
5.12.4国际化和本地化消息资源 76
5.13探索〈util/〉命名空间 78
5.13.1〈util:constant/〉元素 78
5.13.2〈util:property-path/〉元素 79
5.13.3〈util:properties/〉元素 80
5.13.4〈util:list/〉元素 81
5.13.5〈util:map/〉元素 82
5.13.6〈util:set/〉元素 84
5.14使用〈p/〉命名空间 85
5.15操控资源 86
5.15.1内置的Resource继承链 86
5.15.2借助DI容器访问各种资源 88
5.15.3妙用classpath*前缀 89
5.16回调接口集合及其触发I顺序 89
5.16.1BeanNameAware回调接口 89
5.16.2BeanClassLoaderAware回调接口 90
5.16.3BeanFactoryAware回调接口 90
5.16.4ResourceLoaderAware回调接口 91
5.16.5ApplicationEventPublisherAware回调接口 91
5.16.6MessageSourceAware回调接口 91
5.16.7ApplicationContextAware回调接口 92
5.16.8@PostConstruct注解 92
5.16.9InitializingBean回调接口 92
5.16.10〈bean/〉元素的init-method属性 92
5.16.11@PreDestroy注解 93
5.16.12DisposableBean回调接口 93
5.16.13〈bean/〉元素的destroy-method属性 93
5.17小结 94
第6章 面向切面编程 95
6.1AOP背景知识 96
6.2AspectJ6介绍 97
6.2.1AspectJ的安装及使用 98
6.2.2Before装备 104
6.2.3AfterReturning装备 106
6.2.4AfterThrowing装备 108
6.2.5After装备 110
6.2.6Around装备 110
6.2.7引入(Introduction) 112
6.3SpringAOP的基本概念 115
6.4SpringAOP的老式用法 118
6.4.1Before装备 119
6.4.2基于ProxyFactoryBean的手工代理 121
6.4.3AfterRetuming装备 123
6.4.4AfterThrowing装备 125
6.4.5Around装备 126
6.4.6Introduction引入 129
6.4.7使用自动代理特性 129
6.4.8切换代理机制 131
6.4.9基于ProxyFactory的编程代理 132
6.5基于@AspectJ的SpringAOP 132
6.5.1声明切面、pointcut和装备 133
6.5.2各种装备的使用 136
6.5.3切换代理机制 139
6.5.4控制各装备的触发顺序 139
6.5.5pointcut表达语言 140
6.6基于〈aop:config/〉元素的AOP 144
6.6.1声明切面、pointcut和装备 145
6.6.2各种装备的使用 146
6.6.3〈aop:advisor/〉元素 150
6.6.4切换代理机制 150
6.7借用AspectJ6进行领域对象的DI操作 151
6.7.1直接使用AnnotationBean-ConfigurerAspect切面 151
6.7.2@Configurable注解 154
6.7.3借助aop.xml拉制启用的特定切面 156
6.7.4〈aop:include/〉元素 156
6.7.5〈context:spring-configured/〉元素 157
6.7.6借用〈context:load-time-weaver/〉元素 157
6.8小结 158
第3篇 DAO层集成技术 163
第7章 DAO抽象支持 163
7.1背景 163
7.2DAO集成支持 165
7.2.1DataAccessException异常体系 166
7.2.2DaoSupport继承链 167
7.2.3DataAccessUtils实用类 168
7.3小结 169
第8章 JDBC集成 171
8.1背景知识及示例 171
8.2Spring对JDBC提供的支持 176
8.3运行JDBC版PetClinic实例 177
8.4JdbcTemplate及相应的支持类 178
8.4.1JdbcTemplate核心类 179
8.4.2JdbcDaoSupport支持类 187
8.5NamedParameterJdbcTemplate及相应的支持类 188
8.5.1NamedParameterJdbcTemplate模板类 188
8.5.2NamedParameterJdbcDao-Support支持类 190
8.6SimpleJdbcTemplate及相应的支持类 191
8.6.1SimpleJdbcTemplate模板类 191
8.6.2SimpleJdbcDaoSupport支持类 192
8.6.3SimpleJdbcInsert辅助类 193
8.6.4基于JDBC的PetClinic综合示例分析 195
8.7内置的DataSource继承链 197
8.7.1用于测试目的的DriverManagerDataSource 198
8.7.2用于测试目的的SimpleDriverDataSource 198
8.7.3用于测试目的的Single-ConnectionDataSource 198
8.7.4ApacheDBCP数据源 199
8.7.5JavaEE容器内置的数据源 199
8.7.6LazyConnectionDataSource-Proxy数据源 199
8.7.7TransactionAwareDataSource-Proxy数据源 200
8.7.8UserCredentialsDataSource-Adapter数据源 201
8.7.9IsolationLevelDataSource-Adapter数据源 202
8.7.10WebSphereDataSource-Adapter数据源 202
8.7.11IsolationLevelDataSource-Router数据源 202
8.8将JDBC操作建模成Java对象 203
8.8.1SqlUpdate辅助类 204
8.8.2UpdatableSqlQuery辅助类 205
8.8.3MappingSqlQuery辅助类 206
8.8.4SqlFunction辅助类 206
8.9与存储过程交互 207
8.9.1JdbcTemplate针对存储过程提供的支持 208
8.9.2StoredProcedure辅助类 209
8.9.3SimpleJdbcCall辅助类 209
8.10处理大批量数据 210
8.10.1JdbcTemplate内置的batchUpdate()方法 210
8.10.2SimpleJdbcTemplate内置的batchUpdateQ方法 213
8.10.3BatchSqlUpdate辅助类 214
8.11基于JDBC的LOB集成支持 216
8.11.1运行及分析imagedb示例应用 216
8.11.2NativeJdbcExtractor继承链 217
8.11.3操作LOB字段 218
8.12如何获得和生成主键 221
8.12.1KeyHolder及GeneratedKey-Holder实现者 221
8.12.2DataFieldMaxValue-Incrementer继承链 222
8.13对行集的支持 224
8.13.1JdbcTemplate内置的queryForRowSet()方法集合 224
8.13.2NamedParameterJdbcTemplate内置的queryForRowSet()方法集合 224
8.14JDBC最佳实践 225
8.15小结 226
第9章 事务集成 227
9.1背景知识及示例 228
9.2Spring对事务提供的支持 230
9.3Spring眼中的事务管理策略 231
9.3.1事务定义 231
9.3.2各种PlatformTransaction-Manager实现 236
9.4编程式事务 238
9.4.1TransactionTemplate及相关回调接口 238
9.4.2使用@Transactional注解和〈tx:annotation-driven/〉元素 241
9.4.3拥抱EJB3.0引入的@TransactionAttribute注解 245
9.5声明式事务 245
9.5.1TransactionProxyFactoryBean辅助类 245
9.5.2〈tx:advice/〉元素 247
9.6在AspectJ6应用中使用@Transactional 248
9.6.1直接使用Annotation-TransactionAspect切面 248
9.6.2借用〈tx:annotation-driven/〉元素 251
9.6.3借用〈context:load-time-weaver/〉元素 251
9.7事务集成高级特性 252
9.7.1JavaEE应用服务器的事务集成 252
9.7.2〈tx:jta-transaction-manager/〉元素 253
9.7.3选择合适的事务策略 254
9.8小结 254
第10章 单元和集成测试 257
10.1背景知识及示例 257
10.2Spring对集成测试的支持 259
10.2.1ReflectionTestUtils实用类 259
10.2.2运行PetClinic中的集成测试类 260
10.3遗留JUnit3.8集成测试支持 261
10.3.1AbstractSingleSpringContext-Tests支持类 261
10.3.2AbstractDependencylnjection-SpringContextTests支持类 263
10.3.3AbstractTransactionalSpring-ContextTests支持类 265
10.3.4AbstractTransactionalData-SourceSpringContextTests支持类 267
10.3.5AbstractAnnotationAware-TransactionalTests支持类 270
10.4新引入的TestContext集成测试框架 272
10.4.1面向开发者的支持类 272
10.4.2AbstractJUnit38Spring-ContextTests支持类 274
10.4.3AbstractTransactionalJUnit38-SpringContextTests支持类 275
10.4.4AbstractJUnit4Spring-ContextTests支持类 277
10.4.5AbstractTransactionalJUnit4-SpringContextTests支持类 277
10.5集成测试最佳实践 279
10.6小结 280
第11章 Hibernate集成 281
11.1背景知识及示例 281
11.2HibernateTools介绍 289
11.2.1Ant支持 289
11.2.2Eclipse支持 291
11.3Spring对Hibernate提供的支持 293
11.4运行Hibernate版PetClinic实例 293
11.5基于Hibernate集成的CRUD操作 294
11.5.1HibernateTemplate模板类 294
11.5.2HibemateCallback回调接口 299
11.5.3关于SessionFactoty.getCurrentSession()方法的使用 300
11.6LocalSessionFactotyBean 301
11.7AnnotationSession-FactotyBean 303
11.8事务管理支持 306
11.9基于Hibernate的LOB处理 308
11.10为imagedb示例启用JTA事务 311
11.11集成测试支持 314
11.11.1分析Hibernate版PetClinic实例的集成测试工作 314
11.11.2混合使用JDBC和Hibernate 315
11.12小结 320
第12章 Java持久化API集成 321
12.1背景知识及示例 321
12.2Spring对JPA提供的支持 324
12.3基于JPA集成的CRUD操作 325
12.3.1JpaTemplate模板类 325
12.3.2JpaCallbck回调接口 326
12.3.3@PersistenceContext注解 327
12.4AbstractEntityManager-FactoryBean继承链 329
12.4.1LocalEntityManager-FactotyBean辅助类 329
12.4.2LocalContainerEntity-ManagerFactotyBe辅助类 331
12.4.3DataSourceLookup继承链 333
12.5事务管理支持 335
12.6装载期织入(LTW) 337
12.6.1ReflectiveLoadTimeWeaver实现类 338
12.6.2InstrumentationLoad-TimeWeaver实现类 339
12.6.3LoadTimeWeaver继承链在JPA集成中的应用 340
12.7SharedEntityManagerBean 341
12.8集成测试支持 341
12.8.1AbstractJpaTests支持类 341
12.8.2AbstractAspectjJpaTests支持类 342
12.8.3混合使用JDBC和JPA 344
12.9小结 348
第4篇 集成JavaEE服务及技术 351
第13章 JNDI集成 351
13.1背景知识及示例 351
13.2Spring对JNDI提供的支持 354
13.3JndiObjectFactotyBean 354
13.4〈jeejndi-lookup/〉元素 358
13.5JndiTemplate和JndiCallback的使用 359
13.6小结 360
第14章 EJB3.0集成 361
14.1背景知识及示例 361
14.2Spring对开发EJB3.0组件提供的支持 363
14.3Spring对访问EJB3.0组件提供的支持 365
14.3.1借助JndiObjectFactoty-Bean辅助类 365
14.3.2org.springframework.ejb.access包 366
14.3.3〈jee:remote-slsb/〉元素和〈jee:local-slsb/〉元素 367
14.4关于遗留EJB2.x支持 368
14.5小结 368
第15章 线程池和任务调度集成 369
15.1Spring提供的线程池支持 369
15.1.1SyncTaskExecutor执行器 371
15.1.2SimpleAsyncTaskExecutor执行器 371
15.1.3ThreadPoolTaskExecutor和ConcurrentTaskExecutor执行器 371
15.1.4TimerTaskExecutor执行器 372
15.1.5SimpleThreadPool-TaskExecutor执行器 372
15.1.6commonj.WorkManager-TaskExecutor执行器 372
15.1.7jca.work.WorkManager-TaskExecutor继承链 373
15.2Spring提供的任务调度支持 373
15.2.1针对java.util.Timer的任务调度支持 373
15.2.2针对Quartz的任务调度支持 375
15.2.3针对java.util.concurrent的任务调度支持 380
15.2.4针对CommonJ的任务调度支持 381
15.3小结 382
第16章 Java消息服务集成 383
16.1背景知识及示例 384
16.2Spring对JMS消息提供的支持 386
16.3借助JmsTemplate发送JMS消息 386
16.4同步和异步消费JMS消息 393
16.4.1借助JmsTemplate同步接收JMS消息 393
16.4.2AbstractMessageListener-Container容器 394
16.4.3〈jms:listener-container/〉元素 400
16.5JMS事务管理 400
16.6小结 403
第17章 JavaMail集成 405
17.1背景知识及示例 405
17.2Spring对JavaMail提供的支持 407
17.3发送简单邮件 408
17.4发送含有附件的邮件 411
17.5发送含有HTML和内嵌资源的邮件 413
17.6小结 414
第18章 远程服务集成 415
18.1远程服务背景知识及示例 416
18.2Spring对远程服务提供的支持 419
18.3RMI/RMI-ⅡOP集成 421
18.4Hessian和Burlap集成 423
18.4.1DispatcherServlet和HttpRequestHandlerServlet辅助类 424
18.4.2宿主在SunJDK6.0内置的HTTP服务器中 425
18.5HTTPInvoker支持 426
18.6Web服务集成 427
18.6.1JAX-RPC集成 428
18.6.2JAX-WS集成 429
18.7基于JMS的远程服务 430
18.8小结 432
第19章 Java管理扩展集成 433
19.1背景知识及示例 434
19.2Spring对JMX提供的支持 437
19.3自动注册MBean组件 438
19.3.1关于MBeanExporter的autodetectMode和registrationBehavior属性 439
19.3.2Hibernate暴露的StatisticsServiceMBean 440
19.4将POJO导出成MBean组件 442
19.5控制MBean组件的管理接口 444
19.5.1AbstractConfigurable-MBeanInfoAssembler继承链 445
19.5.2基于注解的Metadata-MBeanInfoAssembler 447
19.5.3〈context:mbean-export/〉和〈context:mbean-server/〉元素 449
19.5.4面向异步处理的Lifecycle接口 451
19.6控制MBean组件的ObjectName 453
19.6.1KeyNamingStrategy实现类 453
19.6.2IdentityNamingStrategy实现类 454
19.6.3MetadataNamingStrategy实现类 454
19.7发送与接收JMX通知 455
19.8通过应用访问MBean组件 458
19.9小结 459
第20章 JavaEE连接器架构集成 461
20.1背景知识及示例 461
20.2Spring对JCA提供的支持 463
20.3CciTemplate及相关回调接口 463
20.4将JCA操作建模成Java对象 466
20.5事务管理 468
20.6宿主在JCA适配器中的DI容器 469
20.6.1将SpringContextResource-Adapter部署到RAR中 470
20.6.2ResourceAdapterFactory-Bean辅助类 471
20.7小结 472
第5篇 Spring2.5高级特性 475
第21章 忘却的Spring高级话题 475
21.1分发和监听事件 475
21.2AOP拦截器链 477
21.3DataSourceUtils、Session-FactoryUtils、EntiryManager-FactoryUtils 478
21.4Web层集成支持 480
21.5〈context:component-scan/〉元素 481
21.6如何优雅地销毁DI容器 481
21.6.1Web应用类型 482
21.6.2EJB应用类型 483
21.6.3JavaSE应用、集成测试类型 484
21.7DI容器的分层管理 485
21.8脚本集成 488
21.9小结 490
第22章 Spring最佳实践 491
22.1注重分层架构设计 491
22.2合理采纳注解技术 492
22.3日志管理策略 492
22.4善待JavaEE容器内置的类装载器 495
22.5逐步采纳Spring2.5 496
22.6小结 498
附录A 基于XMLSchema的权威配置指南 499
A.1XML配置文件 499
A.2〈beans/〉命名空间 501
A.2.1〈import/〉元素 501
A.2.2〈alias/〉元素 501
A.2.3〈bean/〉元素 502
A.2.4〈beans/〉元素 505
A.3〈util/〉命名空间 506
A.3.1〈util:constant/〉元素 506
A.3.2〈util:property-path/〉元素 506
A.3.3〈util:properties/〉元素 507
A.3.4〈util:list/〉元素 507
A.3.5〈util:map/〉元素 507
A.3.6〈util:set/〉元素 508
A.4〈context/〉命名空间 508
A.4.1〈context:property-placeholder/〉元素 508
A.4.2〈context:property-override/〉元素 509
A.4.3〈context:annotation-config/〉元素 509
A.4.4〈context:component-scan/〉元素 509
A.4.5〈context:load-time-weaver/〉元素 509
A.4.6〈context:spring-configured/〉元素 510
A.4.7〈context:mbean-export/〉元素 510
A.4.8〈context:mbean-server/〉元素 510
A.5〈aop/〉命名空间 510
A.5.1〈aop:aspectj-autoproxy/〉元素 511
A.5.2〈aop:config/〉元素 511
A.5.3〈aop:scoped-proxy/〉元素 513
A.6〈c/〉命名空间 514
A.6.1〈tx:advice/〉元素 514
A.6.2〈tx:annotation-driven/〉元素 515
A.6.3〈txjta-transaction-manager/〉元素 515
A.7〈jee/〉命名空间 515
A.7.1〈jee:jndi-lookup/〉元素 516
A.7.2〈jee:local-slsb/〉元素 516
A.7.3〈jee:remote-slsb/〉元素 516
A.8〈jms/〉命名空间 517
A.8.1〈jms:listener-container/〉元素 517
A.8.2〈jms:ica-listener-container/〉元素 518
A.9〈lang/〉命名空间 519
A.9.1〈lang:jruby/〉元素 519
A.9.2〈lang:groovy/〉元素 519
A.9.3〈lang:bsh/〉元素 520
A.9.4〈lang:defaults/〉元素 520
A.10〈p/〉命名空间 521
A.11小结 521