《Spring实战(第4版)》是经典的、畅销的Spring学习和实践指南。
第4版针对Spring 4进行了全面更新。全书分为四部分。第1部分介绍Spring框架的核心知识。第二部分在此基础上介绍了如何使用Spring构建Web应用程序。第三部分告别前端,介绍了如何在应用程序的后端使用Spring。第四部分描述了如何使用Spring与其他的应用和服务进行集成。
《Spring实战(第4版)》适用于已具有一定Java 编程基础的读者,以及在Java 平台下进行各类软件开发的开发人员、测试人员,尤其适用于企业级Java 开发人员。本书既可以被刚开始学习Spring 的读者当作学习指南,也可以被那些想深入了解Spring 某方面功能的专业用户作为参考用书。
作者简介 · · · · · ·
Craig Walls是Pivotal的高级工程师,是Spring Social和Spring Sync的项目领导者,同时也是Manning出版社《Spring In Action》的作者,目前这本书已经更新到了第四版。他非常热心于Spring框架的推广,经常在当地的用户组和会议上演讲并在博客上撰写Spring相关的内容。在不琢磨代码的时候,Craig Walls会尽可能多地陪伴他的妻子、两个女儿、两只小鸟以及两只小狗。
目录 · · · · · ·
第1部分 Spring的核心
第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中声明作用域代理 88
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.5 小结 131
第2部分 Web中的Spring
第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 处理表单 157
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视图定义布局 184
6.3.1 配置Tiles视图解析器 185
6.4 使用Thymeleaf 190
6.4.1 配置Thymeleaf视图解析器 190
6.4.2 定义Thymeleaf模板 192
6.5 小结 196
第7章 Spring MVC的高级技术 197
7.1 Spring MVC配置的替代方案 198
7.1.1 自定义DispatcherServlet配置 198
7.1.2 添加其他的Servlet和Filter 199
7.1.3 在web.xml中声明DispatcherServlet 201
7.2 处理multipart形式的数据 204
7.2.1 配置multipart解析器 205
7.2.2 处理multipart请求 208
7.3 处理异常 212
7.3.1 将异常映射为HTTP状态码 213
7.3.2 编写异常处理的方法 214
7.4 为控制器添加通知 216
7.5 跨重定向请求传递数据 217
7.5.1 通过URL模板进行重定向 218
7.5.2 使用flash属性 219
7.6 小结 221
第8章 使用Spring WebFlow 223
8.1 在Spring中配置Web Flow 224
8.1.1 装配流程执行器 224
8.1.2 配置流程注册表 224
8.1.3 处理流程请求 225
8.2 流程的组件 226
8.2.1 状态 226
8.2.2 转移 230
8.2.3 流程数据 231
8.3 组合起来:披萨流程 232
8.3.1 定义基本流程 233
8.3.2 收集顾客信息 236
8.3.2 构建订单 242
8.3.2 支付 244
8.4 保护Web流程 246
8.5 小结 246
第9章 保护Web应用 249
9.1 Spring Security简介 250
9.1.1 理解Spring Security的模块 250
9.1.2 过滤Web请求 251
9.1.3 编写简单的安全性配置 252
9.2 选择查询用户详细信息的服务 255
9.2.1使用基于内存的用户存储 255
9.2.2 基于数据库表进行认证 257
9.2.3 基于LDAP进行认证 259
9.2.4 配置自定义的用户服务 263
9.3 拦截请求 265
9.3.1 使用Spring表达式进行安全保护 267
9.3.2 强制通道的安全性 269
9.3.3 防止跨站请求伪造 270
9.4 认证用户 271
9.4.1 添加自定义的登录页 272
9.4.2 启用HTTP Basic认证 274
9.4.3 启用Remember-me功能 274
9.4.4 退出 275
9.5 保护视图 276
9.5.1 使用Spring Security的JSP标签库 276
9.5.2 使用Thymeleaf的SpringSecurity方言 280
9.6 小结 281
第3部分 后端中的Spring
第10章 通过Spring和JDBC征服数据库 285
10.1 Spring的数据访问哲学 286
10.1.1 了解Spring的数据访问异常体系 287
10.1.2 数据访问模板化 289
10.2 配置数据源 291
10.2.1 使用JNDI数据源 292
10.2.2 使用数据源连接池 292
10.2.3 基于JDBC驱动的数据源 294
10.2.4 使用嵌入式的数据源 295
10.2.5 使用profile选择数据源 296
10.3 在Spring中使用
JDBC 298
10.3.1 应对失控的JDBC代码 299
10.3.2 使用JDBC模板 302
10.4 小结 307
第11章 使用对象-关系映射持久化数据 309
11.1 在Spring中集成Hibernate 310
11.1.1 声明Hibernate的Session工厂 311
11.1.2 构建不依赖于Spring的Hibernate代码 313
11.2 Spring与Java持久化API 315
11.2.1 配置实体管理器工厂 315
11.2.2 编写基于JPA的Repository 320
11.3 借助Spring Data实现自动化的JPA Repository 322
11.3.1 定义查询方法 325
11.3.2 声明自定义查询 328
11.3.3 混合自定义的功能 329
11.4 小结 330
第12章 使用NoSQL数据库 333
12.1 使用MongoDB持久化文档数据 334
12.1.1 启用MongoDB 335
12.1.2 为模型添加注解,实现MongoDB持久化 338
12.1.3 使用MongoTemplate访问MongoDB 341
12.1.4 编写MongoDBRepository 342
12.2 使用Neo4j操作图数据 347
12.2.1 配置Spring DataNeo4j 347
12.2.2 使用注解标注图实体 350
12.2.3 使用Neo4jTemplate 353
12.2.4 创建自动化的Neo4j Repository 354
12.3 使用Redis操作key-value数据 359
12.3.1 连接到Redis 359
12.3.2 使用RedisTemplate 360
12.3.3 使用key和value的序列化器 364
12.4 小结 365
第13章 缓存数据 367
13.1 启用对缓存的支持 368
13.1.1 配置缓存管理器 369
13.2 为方法添加注解以支持缓存 373
13.2.1 填充缓存 374
13.2.2 移除缓存条目 378
13.3 使用XML声明缓存 379
13.4 小结 383
第14章 保护方法应用 385
14.1 使用注解保护方法 386
14.1.1 使用@Secured注解限制方法调用 386
14.1.2 在Spring Security中使用
JSR-250的@RolesAllowed注解 387
14.2 使用表达式实现方法级别的安全性 388
14.2.1 表述方法访问规则 389
14.2.2 过滤方法的输入和输出 391
14.3 小结 395
第4部分 Spring集成
第15章 使用远程服务 399
15.1 Spring远程调用概览 400
15.2 使用RMI 402
15.2.1 导出RMI服务 403
15.2.2 装配RMI服务 405
15.3 使用Hessian和Burlap发布远程服务 407
15.3.1 使用Hessian和Burlap导出bean的功能 408
15.3.2 访问Hessian/Burlap服务 411
15.4 使用Spring的HttpInvoker 413
15.4.1 将bean导出为HTTP服务 413
15.4.2 通过HTTP访问服务 414
15.5 发布和使用Web服务 416
15.5.1 创建基于Spring的JAX-WS端点 416
15.5.2 在客户端代理JAX-WS服务 419
15.6 小结 421
第16章 使用Spring MVC创建REST API 423
16.1 了解REST 424
16.1.1 REST的基础知识 424
16.1.2 Spring是如何支持REST的 425
16.2 创建第一个REST端点 426
16.2.1 协商资源表述 428
16.2.2 使用HTTP信息转换器 433
16.3 提供资源之外的其他内容 438
16.3.1 发送错误信息到客户端 438
16.3.2 在响应中设置头部信息 443
16.4 编写REST客户端 445
16.4.1 了解RestTemplate的操作 446
16.4.2 GET资源 447
16.4.3 检索资源 448
16.4.4 抽取响应的元数据 449
16.4.5 PUT资源 450
16.4.6 DELETE资源 451
16.4.7 POST资源数据 452
16.4.8 在POST请求中获取响应对象 452
16.4.9 在POST请求后获取资源位置 453
16.4.10 交换资源 454
16.5 小结 456
第17章 Spring消息 457
17.1 异步消息简介 458
17.1.1 发送消息 459
17.1.2 评估异步消息的优点 461
17.2 使用JMS发送消息 463
17.2.1 在Spring中搭建消息代理 463
17.2.2 使用Spring的JMS模板 465
17.2.3 创建消息驱动的POJO 474
17.2.4 使用基于消息的RPC 477
17.3 使用AMQP实现消息功能 479
17.3.1 AMQP简介 480
17.3.2 配置Spring支持AMQP消息 481
17.3.3 使用RabbitTemplate发送消息 484
17.3.4 接收AMQP消息 486
17.4 小结 489
第18章 使用WebSocket和STOMP实现消息功能 491
18.1 使用Spring的低层级WebSocket API 492
18.2 应对不支持WebSocket的场景 497
18.3 使用STOMP消息 500
18.3.1 启用STOMP消息功能 501
18.3.2 处理来自客户端的STOMP消息 504
18.3.3 发送消息到客户端 507
18.4 为目标用户发送消息 511
18.4.1 在控制器中处理用户的消息 512
18.4.2 为指定用户发送消息 514
18.5 处理消息异常 515
18.6 小结 516
第19章 使用Spring发送Email 517
19.1 配置Spring发送邮件 518
19.1.1 配置邮件发送器 518
19.1.2 装配和使用邮件发送器 520
19.2 构建丰富内容的Email消息 521
19.2.1 添加附件 521
19.2.2 发送富文本内容的Email 522
19.3 使用模板生成Email 524
19.3.1 使用Velocity构建Email消息 524
19.3.2 使用Thymeleaf构建Email消息 526
19.4 小结 528
第20章 使用JMX管理Spring Bean 529
20.1 将Spring bean导出为MBean 530
20.1.1 通过名称暴露方法 533
20.1.2 使用接口定义MBean的操作和属性 535
20.1.3 使用注解驱动的MBean 536
20.1.4 处理MBean冲突 538
20.2 远程MBean 539
20.2.1 暴露远程MBean 539
20.2.2 访问远程MBean 540
20.2.3 代理MBean 542
20.3 处理通知 543
20.3.1 监听通知 544
20.4 小结 545
第21章 借助Spring Boot简化Spring开发 547
21.1 Spring Boot简介 548
21.1.1 添加Starter依赖 548
21.1.2 自动配置 552
21.1.3 Spring Boot CLI 552
21.1.4 Actuator 553
21.2 使用Spring Boot构建应用 553
21.2.1 处理请求 556
21.2.2 创建视图 558
21.2.3 添加静态内容 560
21.2.4 持久化数据 561
21.2.5 尝试运行 563
21.3 组合使用Groovy与SpringBoot CLI 566
21.3.1 编写Groovy控制器 566
21.3.2 使用Groovy Repository实现数据持久化 569
21.3.3 运行Spring Boot CLI 570
21.4 通过Actuator获取了解应用内部状况 571
21.5 小结 574