第1部分 Spring的核心 3
第1章 Spring之旅 3
1.1 简化Java开发 4
1.1.1 激发POJO的潜能 5
1.1.2 依赖注入 5
1.1.3 应用切面 11
1.1.4 使用模板消除样板式代码 16
1.2 容纳你的Bean 18
1.2.1 使用应用上下文 19
1.2.2 bean的生命周期 20
1.3 俯瞰Spring风景线 21
1.3.1 Spring模块 22
1.3.2 Spring Portfolio 24
1.4 Spring的新功能 27
1.4.1 Spring 3.1新特性 27
1.4.2 Spring 3.2新特性 28
1.4.3 Spring 4.0新特性 30
1.5 小结 30
第2章 装配Bean 33
2.1 Spring配置的可选方案 34
2.2 自动化装配bean 35
2.2.1 创建可被发现的bean 35
2.2.2 为组件扫描的bean命名 38
2.2.3 设置组件扫描的基础包 39
2.2.4 通过为bean添加注解实现自动装配 40
2.2.5 验证自动装配 42
2.3 通过Java代码装配bean 44
2.3.1 创建配置类 44
2.3.2 声明简单的bean 45
2.3.3 借助JavaConfig实现注入 46
2.4 通过XML装配bean 48
2.4.1 创建XML配置规范 48
2.4.2 声明一个简单的<bean> 49
2.4.3 借助构造器注入初始化bean 50
2.4.4 设置属性 56
2.5 导入和混合配置 61
2.5.1 在JavaConfig中引用XML配置 61
2.5.2 在XML配置中引用JavaConfig 63
2.6 小结 65
第3章 高级装配 67
3.1 环境与profile 67
3.1.1 配置profile bean 69
3.1.2 激活profile 73
3.2 条件化的bean 75
3.3 处理自动装配的歧义性 78
3.3.1 标示首选的bean 79
3.3.2 限定自动装配的bean 80
3.4 bean的作用域 84
3.4.1 使用会话和请求作用域 86
3.4.2 在XML中声明作用域代理 87
3.5 运行时值注入 88
3.5.1 注入外部的值 89
3.5.2 使用Spring表达式语言进行装配 93
3.6 小结 99
第4章 面向切面的Spring 101
4.1 什么是面向切面编程 102
4.1.1 定义AOP术语 103
4.1.2 Spring对AOP的支持 105
4.2 通过切点来选择连接点 107
4.2.1 编写切点 108
4.2.2 在切点中选择bean 109
4.3 使用注解创建切面 109
4.3.1 定义切面 110
4.3.2 创建环绕通知 114
4.3.3 处理通知中的参数 115
4.3.4 通过注解引入新功能 118
4.4 在XML中声明切面 120
4.4.1 声明前置和后置通知 122
4.4.2 声明环绕通知 124
4.4.3 为通知传递参数 125
4.4.4 通过切面引入新的功能 127
4.5 注入AspectJ切面 128
4.6 小结 131
第2部分 Web中的Spring 135
第5章 构建Spring Web应用程序 135
5.1 Spring MVC起步 136
5.1.1 跟踪Spring MVC的请求 136
5.1.2 搭建Spring MVC 138
5.1.3 Spittr应用简介 142
5.2 编写基本的控制器 143
5.2.1 测试控制器 145
5.2.2 定义类级别的请求处理 146
5.2.3 传递模型数据到视图中 147
5.3 接受请求的输入 153
5.3.1 处理查询参数 153
5.3.2 通过路径参数接受输入 155
5.4 处理表单 158
5.4.1 编写处理表单的控制器 160
5.4.2 校验表单 163
5.5 小结 166
第6章 渲染Web视图 167
6.1 理解视图解析 167
6.2 创建JSP视图 170
6.2.1 配置适用于JSP的视图解析器 170
6.2.2 使用Spring的JSP库 172
6.3 使用Apache Tiles视图定义布局 185
6.3.1 配置Tiles视图解析器 185
6.4 使用Thymeleaf 190
6.4.1 配置Thymeleaf视图解析器 191
6.4.2 定义Thymeleaf模板 192
6.5 小结 196
第7章 Spring MVC的高级技术 199
7.1 Spring MVC配置的替代方案 200
7.1.1 自定义DispatcherServlet配置 200
7.1.2 添加其他的Servlet和Filter 201
7.1.3 在web.xml中声明DispatcherServlet 203
7.2 处理multipart形式的数据 206
7.2.1 配置multipart解析器 207
7.2.2 处理multipart请求 210
7.3 处理异常 214
7.3.1 将异常映射为HTTP状态码 215
7.3.2 编写异常处理的方法 216
7.4 为控制器添加通知 218
7.5 跨重定向请求传递数据 219
7.5.1 通过URL模板进行重定向 220
7.5.2 使用flash属性 221
7.6 小结 223
第8章 使用Spring Web Flow 225
8.1 在Spring中配置Web Flow 226
8.1.1 装配流程执行器 226
8.1.2 配置流程注册表 226
8.1.3 处理流程请求 227
8.2 流程的组件 228
8.2.1 状态 228
8.2.2 转移 232
8.2.3 流程数据 233
8.3 组合起来:披萨流程 234
8.3.1 定义基本流程 235
8.3.2 收集顾客信息 238
8.3.3 构建订单 244
8.3.4 支付 246
8.4 保护Web流程 248
8.5 小结 248
第9章 保护Web应用 251
9.1 Spring Security简介 252
9.1.1 理解Spring Security的模块 252
9.1.2 过滤Web请求 253
9.1.3 编写简单的安全性配置 254
9.2 选择查询用户详细信息的服务 257
9.2.1 使用基于内存的用户存储 257
9.2.2 基于数据库表进行认证 259
9.2.3 基于LDAP进行认证 261
9.2.4 配置自定义的用户服务 265
9.3 拦截请求 267
9.3.1 使用Spring表达式进行安全保护 269
9.3.2 强制通道的安全性 271
9.3.3 防止跨站请求伪造 272
9.4 认证用户 273
9.4.1 添加自定义的登录页 274
9.4.2 启用HTTPBasic认证 276
9.4.3 启用Remember-me功能 276
9.4.4 退出 277
9.5 保护视图 278
9.5.1 使用Spring Security的JSP标签库 278
9.5.2 使用Thymeleaf的Spring Security方言 282
9.6 小结 283
第3部分 后端中的Spring 287
第10章 通过Spring和JDBC征服数据库 287
10.1 Spring的数据访问哲学 288
10.1.1 了解Spring的数据访问异常体系 289
10.1.2 数据访问模板化 291
10.2 配置数据源 293
10.2.1 使用JNDI数据源 294
10.2.2 使用数据源连接池 294
10.2.3 基于JDBC驱动的数据源 296
10.2.4 使用嵌入式的数据源 297
10.2.5 使用profile选择数据源 298
10.3 在Spring中使用JDBC 300
10.3.1 应对失控的JDBC代码 301
10.3.2 使用JDBC模板 304
10.4 小结 309
第11章 使用对象-关系映射持久化数据 311
11.1 在Spring中集成Hibernate 312
11.1.1 声明Hibernate的Session工厂 313
11.1.2 构建不依赖于Spring的Hibernate代码 315
11.2 Spring与Java持久化API 317
11.2.1 配置实体管理器工厂 317
11.2.2 编写基于JPA的Repository 322
11.3 借助SpringData实现自动化的JPA Repository 324
11.3.1 定义查询方法 327
11.3.2 声明自定义查询 330
11.3.3 混合自定义的功能 331
11.4 小结 332
第12章 使用NoSQL数据库 335
12.1 使用MongoDB持久化文档数据 336
12.1.1 启用MongoDB 337
12.1.2 为模型添加注解,实现MongoDB持久化 340
12.1.3 使用MongoTemplate访问MongoDB 343
12.1.4 编写MongoDB Repository 344
12.2 使用Neo4j操作图数据 349
12.2.1 配置Spring Data Neo4j 349
12.2.2 使用注解标注图实体 352
12.2.3 使用Neo4jTemplate 355
12.2.4 创建自动化的 Neo4j Repository 356
12.3 使用Redis操作key-value数据 361
12.3.1 连接到Redis 361
12.3.2 使用RedisTemplate 362
12.3.3 使用key和value的序列化器 366
12.4 小结 367
第13章 缓存数据 369
13.1 启用对缓存的支持 370
13.1.1 配置缓存管理器 371
13.2 为方法添加注解以支持缓存 375
13.2.1 填充缓存 376
13.2.2 移除缓存条目 380
13.3 使用XML声明缓存 381
13.4 小结 385
第14章 保护方法应用 387
14.1 使用注解保护方法 388
14.1.1 使用@Secured注解限制方法调用 388
14.1.2 在Spring Security中使用JSR-250的@RolesAllowed注解 389
14.2 使用表达式实现方法级别的安全性 390
14.2.1 表述方法访问规则 391
14.2.2 过滤方法的输入和输出 393
14.3 小结 397
第4部分 Spring集成 401
第15章 使用远程服务 401
15.1 Spring远程调用概览 402
15.2 使用RMI 404
15.2.1 导出RMI服务 405
15.2.2 装配RMI服务 407
15.3 使用Hessian和Burlap发布远程服务 409
15.3.1 使用Hessian和Burlap导出bean的功能 410
15.3.2 访问Hessian/Burlap服务 413
15.4 使用Spring的HttpInvoker 415
15.4.1 将bean导出为HTTP服务 415
15.4.2 通过HTTP访问服务 416
15.5 发布和使用Web服务 418
15.5.1 创建基于Spring的JAX-WS端点 418
15.5.2 在客户端代理JAX-WS服务 421
15.6 小结 423
第16章 使用Spring MVC创建 RESTAPI 425
16.1 了解REST 426
16.1.1 REST的基础知识 426
16.1.2 Spring是如何支持REST的 427
16.2 创建第一个REST端点 428
16.2.1 协商资源表述 430
16.2.2 使用HTTP信息转换器 435
16.3 提供资源之外的其他内容 440
16.3.1 发送错误信息到客户端 440
16.3.2 在响应中设置头部信息 445
16.4 编写REST客户端 447
16.4.1 了解RestTemplate的操作 448
16.4.2 GET资源 449
16.4.3 检索资源 450
16.4.4 抽取响应的元数据 451
16.4.5 PUT资源 452
16.4.6 DELETE资源 453
16.4.7 POST资源数据 454
16.4.8 在POST请求中获取响应对象 454
16.4.9 在POST请求后获取资源位置 455
16.4.10 交换资源 456
16.5 小结 458
第17章 Spring消息 459
17.1 异步消息简介 460
17.1.1 发送消息 461
17.1.2 评估异步消息的优点 463
17.2 使用JMS发送消息 465
17.2.1 在Spring中搭建消息代理 465
17.2.2 使用Spring的JMS模板 467
17.2.3 创建消息驱动的POJO 476
17.2.4 使用基于消息的RPC 479
17.3 使用AMQP实现消息功能 481
17.3.1 AMQP简介 482
17.3.2 配置Spring支持AMQP消息 483
17.3.3 使用RabbitTemplate发送消息 486
17.3.4 接收AMQP消息 488
17.4 小结 491
第18章 使用WebSocket和STOMP实现消息功能 493
18.1 使用Spring的低层级WebSocket API 494
18.2 应对不支持WebSocket的场景 499
18.3 使用STOMP消息 502
18.3.1 启用STOMP消息功能 503
18.3.2 处理来自客户端的STOMP消息 506
18.3.3 发送消息到客户端 509
18.4 为目标用户发送消息 513
18.4.1 在控制器中处理用户的消息 514
18.4.2 为指定用户发送消息 516
18.5 处理消息异常 517
18.6 小结 518
第19章 使用Spring发送 Email 519
19.1 配置Spri9g发送邮件 520
19.1.1 配置邮件发送器 520
19.1.2 装配和使用邮件发送器 522
19.2 构建丰富内容的Email消息 523
19.2.1 添加附件 523
19.2.2 发送富文本内容的Email 524
19.3 使用模板生成Email 526
19.3.1 使用Velocity构建Email消息 526
19.3.2 使用Thymeleaf构建Email消息 528
19.4 小结 530
第20章 使用JMX管理Spring Bean 531
20.1 将Springbean导出为MBean 532
20.1.1 通过名称暴露方法 535
20.1.2 使用接口定义MBean的操作和属性 537
20.1.3 使用注解驱动的MBean 538
20.1.4 处理MBean冲突 540
20.2 远程MBean 541
20.2.1 暴露远程MBean 541
20.2.2 访问远程MBean 542
20 2.3 代理MBean 544
20.3 处理通知 545
20.3.1 监听通知 546
20.4 小结 547
第21章 借助Spring Boot简化Spring开发 549
21.1 Spring Boot简介 550
21.1.1 添加Starter依赖 550
21.1.2 自动配置 554
21.1.3 SpringBootCLI 554
21.1.4 Actuator 555
21.2 使用Spring Boot构建应用 555
21.2.1 处理请求 558
21.2.2 创建视图 560
21.2.3 添加静态内容 562
21.2.4 持久化数据 563
21.2.5 尝试运行 565
21.3 组合使用Groovy与Spring Boot CLI 568
21.3.1 编写Groovy控制器 568
21.3.2 使用Groovy Repository实现数据持久化 571
21.3.3 运行Spring Boot CLI 572
21.4 通过Actuator获取了解应用内部状况 573
21.5 小结 576