目录 3
第一部分 Spring基础 3
第1章 开始Spring之旅 3
1.1 为什么使用Spring 4
1.1.1 J2EE开发者的一天 5
1.1.2 Spring的承诺 5
1.2 Spring是什么 7
1.3 开始Spring之旅 10
1.4 理解反向控制 13
1.4.1 依赖注入 14
1.4.2 IoC应用 14
1.4.3 企业级应用中的IoC 21
1.5 应用AOP 22
1.5.1 AOP介绍 22
1.5.2 AOP使用 24
1.5.3 企业级应用中的AOP 27
1.6 Spriing比较 30
1.6.1 比较Spring和EJB 30
1.6.2 关于其他轻量级容器 32
1.6.3 Web框架 33
1.6.4 持久层框架 35
1.7 小结 35
第2章 装配Bean 37
2.1 容纳你的Bean 38
2.1.1 BeanFactory介绍 39
2.1.2 使用应用上下文 40
2.1.3 Bean的生命 41
2.2 基本装配 43
2.2.1 使用XML装配 47
2.2.2 添加一个Bean 48
2.2.3 通过Set方法注入依赖 51
2.2.4 通过构造函数注入依赖 57
2.3 自动装配 60
2.3.1 处理自动装配中的不确定性 62
2.3.2 混合使用自动和手动装配 62
2.3.3 缺省自动装配 63
2.3.4 何时采用自动装配 63
2.4 使用Spring的特殊Bean 64
2.4.1 对Bean进行后处理 64
2.4.2 对Bean工厂进行后处理 67
2.4.3 分散配置 68
2.4.4 定制属性编辑器 69
2.4.5 解析文本信息 73
2.4.6 监听事件 74
2.4.7 发布事件 75
2.4.8 感知其他Bean 76
2.5 小结 78
第3章 创建切面 79
3.1 AOP介绍 80
3.1.1 定义AOP术语 81
3.1.2 Spring的AOP实现 83
3.2 创建通知 84
3.2.1 前置通知 86
3.2.2 后置通知 88
3.2.3 环绕通知 88
3.2.4 异常通知 90
3.2.5 引入通知 91
3.3 定义切入点 91
3.3.1 在Spring中定义切入点 91
3.3.2 理解Advisor 92
3.3.3 使用Spring的静态切入点 93
3.3.4 使用动态切入点 96
3.3.5 切入点实施 98
3.4 创建引入 100
3.4.1 实现IntroductionInterceptor 100
3.4.2 创建一个引入Advisor 103
3.4.3 谨慎使用引入通知 105
3.5 使用ProxyFactoryBean 106
3.6 自动代理 108
3.6.1 BeanNameAutoProxyCreator 109
3.6.2 DefaultAdvisorAutoProxyCreator 110
3.6.3 元数据自动代理 112
3.7 小结 112
第二部分 Spring在业务层的应用 117
第4章 征服数据库 117
4.1 学习Spring的DAO理念 118
4.1.1 理解Spring的DataAccessException 119
4.1.2 与DataSource一起工作 120
4.1.3 一致的DAO支持 122
4.2 在Spring中使用JDBC 124
4.2.1 JDBC代码的问题 124
4.2.2 使用JdbcTemplate 127
4.2.3 把操作创建成对象 135
4.2.4 自增键 137
4.3 介绍Spring的ORM框架支持 138
4.4 用Spring整合Hibernate 139
4.4.1 Hibernate概览 139
4.4.2 管理Hibernate资源 141
4.4.3 用HibernateTemplate访问Hibernate 144
4.4.4 HibernateDaoSupport的子类 145
4.5 Spring和JDO 145
4.5.1 配置JDO 146
4.5.2 用JdoTemplate访问数据库 147
4.6 Spring和iBATIS 148
4.6.1 配置SQL Map 148
4.6.2 使用SqlMapClientTemplate 150
4.7 Spring和OJB 151
4.8 小结 153
第5章 事务管理 154
5.1 理解事务 155
5.1.1 仅用4个词解释事务 156
5.1.2 理解Spring对事务管理的支持 157
5.1.3 介绍Spring的事务管理器 158
5.2 在Spring中编写事务 161
5.3 声明式事务 163
5.3.1 理解事务属性 164
5.3.2 声明一个简单的事务策略 167
5.4 通过方法名声明事务 169
5.4.1 使用NameMatchTransactionAttributeSource 170
5.4.2 名称匹配事务的捷径 173
5.5 用元数据声明事务 173
5.5.1 用元数据来书写事务属性 174
5.5.2 用Commons Attributes声明事务 175
5.6 修剪事务声明 178
5.6.1 从父TransactionProxyFactoryBean继承 179
5.6.2 自动代理事务 181
5.7 小结 183
第6章 远程调用 184
6.1 Spring远程调用概览 185
6.2 与RMI一起工作 188
6.2.1 连接RMI服务 188
6.2.2 输出RMI服务 190
6.3.1 访问Hessian/Burlap服务 194
6.3 使用Hessian和Burlap的远程调用 194
6.3.2 用Hessian或Burlap公开Bean的功能 195
6.4 使用HTTP invoker 199
6.4.1 通过HTTP访问服务 199
6.4.2 把Bean作为HTTP服务公开 200
6.5 使用EJB 201
6.5.1 访问EJB 202
6.5.2 用Spring开发EJB 206
6.6 使用JAX-RPC的Web Service 208
6.6.1 用JAX-RPC应用一个Web Service 208
6.6.2 在Spring里置入一个Web Service 210
6.7 小结 212
第7章 访问企业服务 214
7.1 从JNDI中获取对象 215
7.1.1 使用传统的JNDI 215
7.1.2 代理JNDI对象 216
7.2 发送电子邮件 218
7.3 调度任务 221
7.3.1 使用Java Timer调度任务 221
7.3.2 使用Quartz调度器 224
7.3.3 按调度计划调用方法 228
7.4 使用JMS发送消息 229
7.4.1 使用JMS模板发送消息 230
7.4.2 消费消息 234
7.4.3 转换消息 235
7.5 小结 238
第三部分 Spring在Web层的应用 241
第8章 建立Web层 241
8.1 开始Spring MVC之旅 242
8.1.1 请求生命中的一天 242
8.1.2 配置DispatcherServlet 244
8.1.3 Spring MVC概述 246
8.2 将请求映射到控制器 250
8.2.1 将URL映射到Bean名称 250
8.2.2 使用SimpleUrlHandlerMapping 251
8.2.3 使用元数据映射控制器 252
8.2.4 使用多映射处理器 252
8.3 用控制器处理请求 253
8.3.1 编写一个简单的控制器 255
8.3.2 处理命令 257
8.3.3 处理表单提交 259
8.3.4 用向导处理复杂表单 263
8.3.5 在一个控制器中处理多个动作 269
8.3.6 使用一次性控制器 272
8.4 视图解析 274
8.4.1 使用模板视图 275
8.4.2 解析视图Bean 277
8.4.3 选择视图解析器 280
8.5 使用Spring的绑定标签 281
8.6 处理异常 283
8.7 小结 284
第9章 其他视图技术 285
9.1 使用Velocity模板 286
9.1.1 定义Velocity视图 287
9.1.2 配置Velocity引擎 288
9.1.3 解析velocity视图 289
9.1.4 格式化日期和数字 290
9.1.5 暴露请求和会话属性 291
9.1.6 在Velocity中绑定表单域 291
9.2 使用FreeMarker 293
9.2.1 构造一个FreeMarker视图 293
9.2.2 配置FreeMarker引擎 294
9.2.3 解析FreeMarker视图 295
9.2.4 在FreeMarker中绑定表单域 296
9.3 使用Tile设计页面布局 297
9.3.1 Tile视图 297
9.3.2 Tile控制器 300
9.4 产生非HTML输出 302
9.4.1 产生Excel工作表 303
9.4.2 产生PDF文档 305
9.4.3 产生其他非HTML文件 307
9.5 小结 309
第10章 使用其他Web框架 310
10.1 使用Jakarta Struts 311
10.1.1 注册Spring插件 312
10.1.2 实现知晓Spring的Struts action 312
10.1.3 委托action 313
10.2 使用Tapestry 316
10.2.1 替换Tapestry引擎 316
10.2.2 装载Spring Bean至Tapestry页面中 318
10.3 集成JavaServer Faces 320
10.3.1 解析变量 321
10.3.2 发布请求已处理事件 324
10.4 集成WebWork 325
10.4.1 WebWorkl 326
10.4.2 XWork/WebWork2 327
10.5 小结 328
第11章 保护Spring应用程序 330
11.1 Acegi安全系统介绍 331
11.1.1 安全拦截器 332
11.1.2 认证管理器 332
11.2 管理身份验证 333
11.1.3 访问决策管理器 333
11.1.4 运行身份管理器 333
1 1.2.1 配置ProviderManager 334
11.2.2 根据数据库验证身份 336
11.2.3 根据LDAP仓库进行身份验证 343
11.2.4 基于Acegi和Yale CAS实现单次登录 345
11.3 控制访问 349
11.3.1 访问决策投票 350
11.3.2 决定如何投票 351
11.3.3 处理投票弃权 352
11.4 保护Web应用程序 353
11.4.1 代理Acegi的过滤器 354
11.4.2 强制Web安全性 357
11.4.3 处理登录 360
11.4.4 设置一个安全上下文 365
11.4.5 确保通道安全性 366
11.4.6 使用Acegi的标签库 370
11.5 保护方法调用 371
11.5.1 创建一个安全切面 371
11.5.2 使用元数据保护方法 373
11.6 小结 374
附录A 装配Spring 375
A.1 下载Spring 376
A.2 选择一种JAR文件 376
A.3 搭建你的项目 377
A.4 利用Ant创建 377
附录B Spring相关项目 380
B.1 AppFuse 381
B.2 Rich Client Project 382
B.3 Spring.NET 382