第1章 POJO编程模型、轻量级容器和控制反转 1
1.1 POJO编程模型 2
1.1.1 原来的EJB编程模型所存在的问题 2
1.1.2 POJO编程模型的优点 7
1.2 轻量级容器和控制反转 8
1.2.1 轻量级容器 8
1.2.2 控制反转 9
1.3 依赖注入 10
1.3.1 Setter注入 11
1.3.2 构造函数注入 11
1.3.3 Setter注入或构造函数注入 11
1.4 小结 12
1.5 习题 12
1.6 本章主要知识点 12
第2章 使用Spring进行依赖注入 15
2.1 Spring IoC容器 16
2.1.1 配置元数据 16
2.1.2 配置和使用容器 18
2.2 依赖注入 28
2.2.1 Setter注入 28
2.2.2 构造函数注入 29
2.2.3 循环依赖 32
2.2.4 依赖解析过程 33
2.2.5 重写Bean定义 34
2.2.6 使用depends.on特性 36
2.2.7 自动装配 37
2.2.8 Bean查找 41
2.3 Spring管理的Bean 42
2.3.1 命名Bean 42
2.3.2 Bean实例化方法 43
2.3.3 Bean作用域 46
2.3.4 延迟初始化 49
2.3.5 生命周期回调 50
2.3.6 Bean定义配置文件 52
2.3.7 环境 54
2.4 小结 57
2.5 习题 58
2.6 本章主要知识点 58
第3章 使用Spring MVC构建Web应用程序 61
3.1 学习Spring MVC的功能和优点 62
3.2 使用Dispatcher Servlet机制 63
3.2.1 定义Servlet 64
3.2.2 访问Servlet上下文 65
3.3 创建第一个Spring MVC应用程序 65
3.4 使用注解配置Spring MVC 69
3.5 使用JSP处理表单 70
3.5.1 配置表单标签库 71
3.5.2 理解绑定的强大功能 72
3.5.3 使用表单 72
3.5.4 使用输入元素 73
3.5.5 输入日期 74
3.5.6 使用下拉框进行选择 74
3.5.7 使用单选按钮进行选择 75
3.5.8 使用复选框进行选择 76
3.5.9 添加标签 76
3.5.10 放置按钮 76
3.5.11 样式 76
3.6 使用注解的强大功能 81
3.6.1 @Controller 82
3.6.2 @RequestMapping 82
3.6.3 @ModeAttribute 82
3.6.4 @PathVariable 82
3.6.5 @ControllerAdvice 83
3.6.6 @InitBinder 83
3.6.7 @ExceptionHandler 83
3.7 验证用户输入 83
3.8 上传文件 88
3.9 处理异常 91
3.10 实现国际化(i18n) 92
3.11 使用主题 94
3.12 小结 97
3.13 习题 97
3.14 本章主要知识点 98
第4章 使用Spring进行JDBC数据访问 101
4.1 使用普通JDBC所带来的问题 102
4.2 引入Spring的JDBC支持 103
4.2.1 管理JDBC连接 103
4.2.2 配置和使用Spring的JDBC支持 109
4.3 使用Spring执行数据访问操作 112
4.3.1 执行查询 112
4.3.2 使用命名参数进行查询 115
4.3.3 使用In子句编写查询 116
4.3.4 在JdbcTemplate中使用PreparedStatements 117
4.3.5 插入、更新和删除记录 119
4.3.6 调用存储过程和存储函数 122
4.3.7 执行批处理操作 124
4.3.8 处理BLOB和CLOB对象 124
4.3.9 访问特定于供应商的JDBC方法 125
4.3.10 执行DDL操作 125
4.4 将JDBC操作模块化为Java对象 126
4.4.1 封装SQL查询执行 126
4.4.2 封装SQL DML操作 128
4.4.3 封装存储过程执行 129
4.5 异常处理和错误代码转换 130
4.5.1 常见的数据访问异常层次结构 130
4.5.2 SQLException的自动处理和转换 131
4.6 小结 131
4.7 习题 132
4.8 本章主要知识点 132
第5章 通过Spring使用JPA进行数据访问 135
5.1 概述ORM和JPA 136
5.1.1 范式不匹配 136
5.1.2 ORM框架的构建块 137
5.1.3 JPA所提供的功能 137
5.1.4 将对象模型映射到关系模型 137
5.1.5 将Java类型映射到SQL类型 142
5.1.6 配置和使用JPA 144
5.2 Spring的JPA支持 153
5.2.1 在Spring容器中设置JPA 153
5.2.2 基于纯JPA实现DAO 158
5.2.3 处理和转换异常 163
5.2.4 在Spring环境中进一步配置JPA 165
5.3 小结 168
5.4 习题 169
5.5 本章主要知识点 169
第6章 使用Spring管理事务 171
6.1 理解事务管理 172
6.2 Spring的事务抽象模型 175
6.2.1 本地事务与全局事务 177
6.2.2 PlatformTransaction Manager实现 178
6.2.3 Spring的抽象事务模型的优点 178
6.3 使用Spring进行声明式事务管理 179
6.3.1 将服务层与数据访问技术细节进行隔离 182
6.3.2 自定义默认的事务行为 184
6.3.3 在类级别使用@Transactional 185
6.3.4 理解事务传播规则 186
6.3.5 使用<tx:advice>进行声明式事务管理 190
6.4 使用Spring进行编程式事务管理 193
6.5 在事务之前或者之后执行自定义逻辑 198
6.5.1 通知事务性操作 199
6.5.2 使用Transaction Synchronization执行事务后的逻辑 200
6.6 小结 201
6.7 习题 201
6.8 本章主要知识点 201
第7章 使用Spring进行测试驱动开发 203
7.1 配置和缓存ApplicationContext 204
7.1.1 在测试中使用基于XML和基于Java的上下文配置 204
7.1.2 使用Application ContextInitializer配置上下文 207
7.1.3 继承上下文配置 208
7.1.4 ApplicationContext缓存 210
7.2 注入测试夹具的依赖项 211
7.3 在测试中使用事务管理 213
7.4 测试Web应用程序 216
7.4.1 测试中的上下文层次结构 218
7.4.2 测试Request和Session作用域的Bean 219
7.4.3 测试Spring MVC项目 221
7.5 使用Mock对象以及其他用于测试的实用工具 225
7.5.1 Spring针对测试所提供的Mock对象 226
7.5.2 其他实用工具和测试注解 226
7.6 小结 227
7.7 习题 227
7.8 本章主要知识点 228
第8章 使用Spring进行面向方面编程 229
8.1 在Spring中开始使用AOP 230
8.2 熟悉通知的类型 235
8.2.1 Before 236
8.2.2 After Returning 236
8.2.3 After Throwing 236
8.2.4 After(Finally) 237
8.2.5 Around 238
8.3 定义切入点指示符 239
8.3.1 类型签名表达式 240
8.3.2 方法签名表达式 240
8.3.3 其他替代的切入点指示符 240
8.4 利用注解的强大功能 241
8.4.1 @Before 241
8.4.2 @PointCut 242
8.4.3 @After 243
8.4.4 @AfterReturning 243
8.4.5 @AfterThrowing 244
8.4.6 @Aspect 244
8.4.7 @Around 244
8.4.8 @DeclareParents 245
8.5 将ApectJ和Spring融合在一起 246
8.6 使用注解配置Spring AOP 250
8.7 小结 251
8.8 习题 251
8.9 本章主要知识点 252
第9章 Spring表达式语言 253
9.1 使用SpEL配置应用程序 254
9.2 创建一个分析器 256
9.3 调用方法 260
9.3.1 调用构造函数 262
9.3.2 调用静态方法 263
9.4 使用变量和函数 263
9.4.1 #root 263
9.4.2 #this 264
9.4.3 访问系统属性和环境 264
9.4.4 内联列表 264
9.4.5 注册函数 265
9.5 了解SpEL运算符 265
9.5.1 关系运算符 266
9.5.2 算术运算符 266
9.5.3 逻辑运算符 266
9.5.4 条件运算符 267
9.5.5 正则表达式运算符 268
9.5.6 安全导航运算符 269
9.5.7 集合选择和投影 269
9.5.8 选择集合中的第一个和最后一个元素 270
9.6 使用SpEL中的实用工具 271
9.6.1 访问Spring Bean 271
9.6.2 <spring:eval> 271
9.6.3 缓存中的表达式 272
9.7 小结 272
9.8 习题 272
9.9 本章主要知识点 272
第10章 缓存 275
10.1 创建第一个缓存应用程序 276
10.1.1 使用一个不同的名称配置缓存管理器 279
10.1.2 使用注解配置缓存抽象 279
10.2 使用缓存注解 280
10.2.1 @Cacheable 280
10.2.2 @CacheEvict 282
10.2.3 @CachePut 282
10.2.4 @Caching 282
10.3 实现缓存管理器 283
10.3.1 SimpleCacheManager 283
10.3.2 NoOpCacheManager 284
10.3.3 ConcurrentMap CacheManager 284
10.3.4 CompositeCache Manager 284
10.4 将SpEL投射到缓存中 285
10.5 以编程方式初始化缓存 286
10.6 寻找替换的缓存提供程序 288
10.6.1 Ehcache 288
10.6.2 Guava 292
10.6.3 Hazelcast 292
10.7 小结 293
10.8 习题 293
10.9 本章主要知识点 294
第11章 使用Spring开发REST风格的Web服务 295
11.1 创建第一个REST Web服务 296
11.2 从REST Web服务返回不同的HTTP状态码 307
11.3 学习一种基于注解的配置替换方法 308
11.4 通过XML使用REST Web服务 309
11.5 使用异常处理机制 312
11.6 对REST风格的服务进行单元测试 315
11.7 小结 318
11.8 习题 318
11.9 本章主要知识点 318
第12章 使用Spring Security保护Web应用程序的安全 321
12.1 为什么要使用Spring Security 322
12.2 Spring Security的功能 323
12.3 配置和使用Spring Security 324
12.4 理解Spring Security的基础构建基块 330
12.5 对用户进行身份验证 331
12.5.1 不成功的登录流程 331
12.5.2 成功的登录流程 332
12.5.3 匿名身份验证 333
12.5.4 自定义登录页面 334
12.5.5 注销过程 335
12.5.6 使用JDBC访问UserDetails 336
12.5.7 对密码进行加密 339
12.5.8 Remember-Me支持 339
12.5.9 用户会话管理 341
12.5.10 基本身份验证 342
12.6 授权Web请求和服务方法调用 343
12.6.1 授权Web请求 343
12.6.2 授权是如何工作的 345
12.6.3 基于表达式的授权 347
12.6.4 使用JSP安全标记 348
12.6.5 授权服务方法 349
12.7 小结 353
12.8 习题 354
12.9 本章主要知识点 354
第13章 Spring 4.0 357
13.1 跟上最新技术:Java 8和Java EE7支持 357
13.2 使用条件依赖项配置注入 362
13.3 对自动配置集合中的元素进行排序 365
13.4 重复的注解 367
13.5 引入新的注解 369
13.6 小结 370
13.7 习题 370
13.8 本章主要知识点 370
附录A 参考答案 371