第1章 快速入门 1
1.1 Spring概述 1
1.1.1 认识Spring 1
1.1.2 Spring带给我们什么 2
1.1.3 Spring体系结构 3
1.2 实例功能概述 5
1.2.1 比Hello World更适用的实例 5
1.2.2 实例功能简介 5
1.3 环境准备 7
1.3.1 创建库表 7
1.3.2 建立工程 8
1.3.3 类包及Spring配置文件规划 12
1.4 持久层 13
1.4.1 建立领域对象 13
1.4.2 UserDao 14
1.4.3 LoginLogDao 17
1.4.4 在Spring中装配DAO 17
1.5 业务层 19
1.5.1 UserService 19
1.5.2 在Spring中装配Service 20
1.5.3 单元测试 21
1.6 展现层 23
1.6.1 配置Spring MVC框架 23
1.6.2 处理登录请求 25
1.6.3 JSP视图页面 28
1.7 运行Web应用 29
1.8 小结 30
第2章 Spring IoC容器 31
2.1 IoC概述 32
2.2 BeanFactory和ApplicationContext 32
2.2.1 BeanFactory介绍 32
2.2.2 ApplicationContext介绍 33
2.2.3 资源加载 38
2.3 Bean装配 39
2.3.1 Bean基本配置 40
2.3.2 依赖注入 42
2.3.3 注入参数详解 47
2.3.4 Bean作用域 53
2.3.5 基于注解的配置 54
2.3.6 基于Java类的配置 59
2.3.7 不同配置方式比较 64
2.4 小结 65
第3章 Spring AOP 66
3.1 AOP概述 66
3.1.1 AOP到底是什么 67
3.1.2 AOP术语 68
3.2 创建增强类 70
3.2.1 增强类型 70
3.2.2 前置增强 71
3.2.3 后置增强 74
3.2.4 环绕增强 75
3.2.5 异常抛出增强 76
3.3 创建切面 78
3.3.1 切点类型 79
3.3.2 切面类型 80
3.3.3 静态普通方法名匹配切面 80
3.3.4 静态正则表达式方法匹配切面 82
3.4 自动创建代理 85
3.4.1 实现类介绍 85
3.4.2 BeanNameAuto ProxyCreator 86
3.4.3 DefaultAdvisorAuto ProxyCreator 87
3.5 基于@AspectJ配置切面 88
3.5.1 @AspectJ语法基础 88
3.5.2 使用前的准备 90
3.5.3 一个简单的例子 91
3.5.4 如何通过配置使用@AspectJ切面 93
3.5.5 不同增强类型 93
3.6 基于Schema配置切面 95
3.6.1 一个简单切面的配置 95
3.6.2 配置命名切点 96
3.6.3 各种增强类型的配置 97
3.6.4 绑定连接点信息 99
3.6.5 Advisor配置 100
3.7 各种切面类型总结 101
3.8 小结 102
第4章 使用Spring JDBC访问数据库 103
4.1 使用Spring JDBC 103
4.1.1 JdbcTemplate小试牛刀 104
4.1.2 在DAO中使用JdbcTemplate 104
4.2 基本的数据操作 106
4.2.1 更改数据 106
4.2.2 返回数据库的表自增主键值 108
4.2.3 批量更改数据 110
4.2.4 查询数据 111
4.2.5 查询单值数据 114
4.2.6 调用存储过程 116
4.3 BLOB/CLOB类型数据的操作 118
4.3.1 插入Lob类型的数据 118
4.3.2 以块数据方式读取Lob数据 120
4.3.3 以流数据方式读取Lob数据 120
4.4 其他类型的JdbcTemplate 121
4.4.1 NamedParameterJdbcTemplate 121
4.4.2 SimpleJdbcTemplate 123
4.5 以OO方式访问数据库 123
4.5.1 使用MappingSqlQuery查询数据 123
4.5.2 使用SqlUpdate更新数据 125
4.5.3 使用StoredProcedure执行存储过程 126
4.5.4 SqlFunction类 127
4.7 小结 128
第5章 集成Hibernate 129
5.1 Spring整合ORM技术 129
5.2 在Spring中使用Hibernate 131
5.2.1 配置SessionFactory 131
5.2.2 使用HibernateTemplate 134
5.2.3 处理LOB类型数据 137
5.2.4 添加Hibernate事件监听器 138
5.2.5 使用原生Hibernate API 139
5.2.6 使用注解配置 140
5.2.7 事务处理 141
5.2.8 延迟加载的问题 142
5.3 DAO层设计 143
5.3.1 DAO基类的设计 143
5.3.2 查询接口方法的设计 145
5.3.3 分页查询接口设计 147
5.4 小结 148
第6章 Spring的事务管理 149
6.1 数据库事务基础知识 149
6.1.1 何为数据库事务 149
6.1.2 JDBC对事务支持 150
6.2 Spring对事务管理的支持 152
6.2.1 事务管理关键抽象 152
6.2.2 Spring的事务管理器实现类 155
6.2.3 事务同步管理器 157
6.2.4 事务传播行为 158
6.3 编程式的事务管理 159
6.4 使用XML配置声明式事务 160
6.4.1 一个将被实施事务增强的服务接口 161
6.4.2 使用原始的TransactionProxyFactoryBean 162
6.4.3 基于tx/aop命名空间的配置 165
6.5 使用注解配置声明式事务 167
6.5.1 使用@Transactional注解 167
6.5.2 通过AspectJ LTW引入事务切面 172
6.6 小结 173
第7章 Spring MVC 174
7.1 Spring MVC概述 174
7.1.1 体系结构 175
7.1.2 配置DispatcherServlet 176
7.2 注解驱动的控制器 178
7.2.1 使用@RequestMapping映射请求 178
7.2.2 请求处理方法签名概述 182
7.2.3 处理方法签名详细说明 183
7.2.4 处理模型数据 186
7.3 数据校验 191
7.3.1 Spring校验框架 191
7.3.2 Spring MVC数据校验 192
7.3.3 如何获取校验结果 193
7.3.4 如何在页面中显示错误 194
7.3.5 通过国际化资源显示错误信息 196
7.4 视图和视图解析器 197
7.4.1 认识视图 198
7.4.2 认识视图解析器 199
7.4.3 JSP和JSTL 200
7.4.4 模板视图 204
7.4.5 输出XML 208
7.4.6 输出JSON 208
7.4.7 使用XmlViewResolver 209
7.4.8 使用ResourceBundleViewResolver 209
7.4.9 混合使用多种视图技术 210
7.5 本地化解析 213
7.5.1 本地化概述 213
7.5.2 使用CookieLocaleResolver 213
7.5.3 使用SessionLocale Resolver 214
7.5.4 使用LocaleChangeInterceptor 214
7.6 文件上传 215
7.6.1 配置MultipartResolver 215
7.6.2 编写控制器和文件上传表单页面 215
7.7 小结 216
第8章 单元测试 217
8.1 单元测试概述 217
8.1.1 为什么需要单元测试 218
8.1.2 单元测试基本概念 219
8.2 TestNG快速进阶 221
8.2.1 TestNG概述 221
8.2.2 TestNG生命周期 221
8.2.3 使用TestNG 222
8.3 模拟利器Mockito 226
8.3.1 模拟测试概述 226
8.3.2 创建Mock对象 227
8.3.3 设定Mock对象的期望行为及返回值 228
8.3.4 验证交互行为 229
8.4 测试整合之王Unitils 230
8.4.1 Unitils概述 230
8.4.2 集成Spring 232
8.4.3 集成DbUnit 234
8.5 使用Unitils测试DAO层 234
8.5.1 Unitils配置 237
8.5.2 准备测试数据 238
8.5.3 编写测试用例 240
8.7 使用Unitils测试Service层 242
8.8 测试Web层 246
8.8.1 对LoginController进行单元测试 247
8.8.2 使用Spring ServletAPI模拟对象 248
8.8.3 使用Spring RestTemplate测试 249
8.9 小结 251
第9章 敏捷开发技术 253
9.1 敏捷开发概述 253
9.1.1 敏捷开发原则 254
9.1.2 敏捷开发过程 255
9.2 敏捷开发方法Scrum 258
9.3 测试驱动开发(TDD)实例 260
9.4 版本管理工具GIT 267
9.4.1 版本控制意义 267
9.4.2 SVN 267
9.4.3 GIT 268
9.5 代码构建利器Maven 270
9.5.1 Maven概述 270
9.5.2 Maven入门 273
9.5.3 Maven实例 274
9.6 持续集成Hudson 278
9.7 小结 279
第10章 自己动手打造服务平台框架 280
10.1 服务平台概述 281
10.1.1 SOA实现技术 281
10.1.2 Web Service技术框架 282
10.1.3 技术框架的局限 282
10.1.4 TOP介绍 283
10.2 快速了解ROP 283
10.2.1 ROP概述 283
10.2.2 使用ROP开发一个服务 285
10.3 请求服务模型 291
10.3.1 传统Web Service请求模型 291
10.3.2 ROP请求模型 292
10.3.3 参数数据绑定与校验 294
10.3.4 XML和JSON参数绑定 296
10.3.5 自定义数据转换器 299
10.3.6 请求服务映射 301
10.4 应用授权及验证 303
10.4.1 应用键/应用密钥 303
10.4.2 应用键/密钥管理器 304
10.4.3 签名算法 304
10.4.4 签名功能控制 305
10.5 服务会话管理 307
10.5.1 会话管理概述 307
10.5.2 注册会话管理器 307
10.5.3 开发登录和退出服务 308
10.6 错误模型 309
10.6.1 错误模型概述 309
10.6.2 系统级主错误编码 310
10.6.3 系统级子错误编码 310
10.6.4 业务级子错误编码 313
10.7 响应报文控制 315
10.7.1 分体式报文模型 315
10.7.2 响应报文定义 315
10.7.3 报文输出格式 316
10.7.4 报文的国际化支持 316
10.8 文件上传 317
10.8.1 ROP文件上传解决思路 317
10.8.2 文件上传实例 319
10.8.3 文件上传控制 320
10.9 服务安全控制 320
10.9.1 安全控制架构 320
10.9.2 ServiceAccess Controller 321
10.9.3 InvokeTimes Controller 323
10.10 拦截器及事件体系 324
10.10.1 拦截器 324
10.10.2 事件及监听 326
10.11 性能调优 327
10.11.1 服务平台线程池参数调整 328
10.11.2 限制服务的占用时长 328
10.11.3 限制应用/用户的访问 328
10.12 开发客户端SDK 329
10.12.1 ROP提供了哪些支持 329
10.12.2 服务开放平台的SDK包 332
10.13 小结 333
第11章 实战案例开发 334
11.1 景区网站案例概述 334
11.1.1 景区网站整体功能结构 334
11.1.2 景区网站用例描述 335
11.1.3 主要功能流程描述 336
11.2 系统设计 338
11.2.1 技术框架选择 338
11.2.2 Web目录结构及类包结构规划 338
11.2.3 单元测试类包结构规划 339
11.2.4 系统的页面交互流程设计 340
11.2.5 PO类设计 340
11.2.6 持久层设计 341
11.2.7 服务层设计 342
11.2.8 Web层设计 342
11.2.9 数据库设计 343
11.3 开发前的准备 345
11.4 持久层开发 345
11.4.1 PO类 345
11.4.2 DAO基类 349
11.4.3 通过扩展基类定义DAO类 350
11.4.4 DAO Bean的装配 351
11.4.5 使用Hibernate二级缓存 353
11.5 对持久层进行测试 355
11.5.1 配置Unitils测试环境 355
11.5.2 准备测试数据库及测试数据 356
11.5.3 编写DAO测试基类 356
11.5.4 编写ViewSpaceDao测试用例 357
11.6 服务层开发 359
11.6.1 ViewSpaceService的开发 359
11.6.2 服务类Bean的装配 361
11.7 对服务层进行测试 363
11.7.1 编写Service测试基类 363
11.7.2 编写ViewSpaceService测试用例 363
11.8 Web层开发 365
11.8.1 BaseController的基类 365
11.8.2 景区网站首页 367
11.8.3 景区查询 370
11.8.4 景区详细信息的页面 371
11.8.5 web.xml配置 373
11.8.6 Spring MVC配置 375
11.9 对Web层进行测试 376
11.9.1 编写Web测试基类 376
11.9.2 编写ViewManage ControllerTest测试用例 377
11.10 部署和运行应用 379
11.11 小结 380