重磅推荐
【产品特色】

【编辑推荐】
本书理论与工程实践相结合,全面阐述Spring 5的新特性
从Spring实战到源码分析,再到原理剖析,以及Spring与各种主流中间件及框架结合的落地实践,可以让读者深入理解Spring的实现原理和底层架构,使用Spring的强大功能至上而下地构建复杂的Spring应用程序
【内容简介】
Spring框架是为了降低解决企业系统开发的复杂度而产生的,掌握并学会使用Spring框架进行项目开发,是Java开发人员技能之一,本书从企业应用开发的角度出发,深入浅出地讲解了Spring 5的新特性和Spring集成开发技术。全书共19章,第1章~第3章主要讲解如何搭建Spring开发环境以及Spring IoC和AOP容器的原理及代码分析。第4章和第5章概述Spring 5和Java 8的新特性。第6章和第7章讲解Spring 5新特性—— WebFlux响应式编程、开发和调试。第8章和第9章主要讲解Spring 5集成Kotlin语言以及更多Spring 5新特性的细节。第10章~第19章主要介绍Spring集成其他热门技术,例如,Log4j2日志框架、Spring MVC、MyBatis、Redis缓存、 ZooKeeper、Kafka消息中间件、Mycat分库分表中间件、Sharding-JDBC和Dubbo服务治理框架等。附录部分介绍本书涉及的以及在面试中常见的设计模式。 本书适用于所有Java编程语言开发人员、分布式系统开发爱好者以及计算机专业的学生等。
【作者简介】
周冠亚,上海交通大学软件工程硕士,先后就职于万达网络科技有限公司、上海2345网络科技有限公司、美团点评,主要从事后端Java开发工作,拥有丰富的软件开发经验,熟悉Java、高并发、微服务、大数据及相关软件架构。
黄文毅, CSDN博客专家,CSDN学院、网易学院和腾讯学院等网络学院讲师;曾就职于厦门星耀蓝图科技有限公司和上海美团,目前就职于厦门美图科技有限公司,主要从事美图秀秀和美拍后端开发工作。
【目录】
目 录
*篇 Spring基础篇

第1章 环境搭建 3
1.1 Spring介绍 3
1.1.1 Spring设计目标 3
1.1.2 Spring各个子模块 3
1.1.3 Spring使用场景 4
1.1.4 Spring与Spring MVC的关系 5
1.1.5 Spring 5高级特性 5
1.2 环境准备 5
1.2.1 安装JDK 5
1.2.2 安装IntelliJ IDEA 6
1.2.3 安装Apache Maven 6
1.2.4 安装Apache Tomcat 7
1.3 快速搭建Spring 5项目 8
1.3.1 使用IntelliJ IDEA创建Spring 5 Spring MVC项目 8
1.3.2 测试部署 9
1.4 小结 9
第2章 Spring IoC容器原理 10
2.1 IoC容器揭秘 10
2.1.1 IoC的概念 10
2.1.2 依赖倒置原则 11
2.1.3 依赖注入 16
2.2 Spring IoC的实现方式 17
2.2.1 XML方式实现 17
2.2.2 通过注解方式实现 20
2.3 Spring IoC实现原理解析 21
2.3.1 BeanFactory代码解析 21
2.3.2 ApplicationContext代码解析 22
2.3.3 BeanDefinition代码解析 23
2.3.4 Spring IoC代码分析 23
2.4 Spring IoC容器中Bean的生命周期 44
2.5 小结 52
第3章 Spring AOP揭秘 53
3.1 AOP前置知识 53
3.1.1 JDK动态代理 53
3.1.2 CGLIB动态代理 56
3.1.3 AOP联盟 58
3.2 AOP概述 58
3.2.1 AOP基本概念 58
3.2.2 Spring AOP相关概念 59
3.3 Spring AOP实现 60
3.3.1 基于JDK动态代理实现 60
3.3.2 基于CGLIB动态代理实现 65
3.4 基于Spring AOP的实战 70
3.4.1 增强类型 70
3.4.2 前置增强 71
3.4.3 后置增强 73
3.4.4 环绕增强 74
3.4.5 异常抛出增强 75
3.4.6 引介增强 75
3.4.7 切入点类型 77
3.5 Spring集成AspectJ实战 78
3.5.1 使用AspectJ方式配置Spring AOP 78
3.5.2 AspectJ各种切点指示器 81
3.5.3 args()与“@args()” 81
3.5.4 @annotation() 87
3.5.5 execution 89
3.5.6 target()与“@target()” 90
3.5.7 this() 92
3.5.8 within()与“@within()” 95
3.6 Spring AOP的实现原理 98
3.6.1 设计原理 99
3.6.2 JdkDynamicAopProxy 106
3.6.3 CglibAopProxy 110
3.7 小结 115

第二篇 Spring 5新特性篇

第4章 Spring 5新特性概述 117
4.1 Spring 5.0新特性 117
4.1.1 运行环境 117
4.1.2 删除的代码 118
4.1.3 核心修改 118
4.1.4 核心容器更新 118
4.1.5 Spring Web MVC更新 118
4.1.6 Spring WebFlux 119
4.1.7 对Kotlin的支持 119
4.1.8 测试改进 120
4.2 Spring 5.1新特性 121
4.2.1 核心修改 121
4.2.2 核心容器更新 121
4.2.3 Web修改 121
4.2.4 Spring Web MVC更新 121
4.2.5 Spring WebFlux更新 122
4.2.6 Spring Messaging更新 122
4.2.7 Spring ORM更新 122
4.2.8 测试更新 122
第5章 Java 8新特性概述 123
5.1 Lambda表达式 123
5.1.1 Lambda表达式初探 123
5.1.2 Lambda表达式作用域 125
5.1.3 在线程中使用Lambda表达式 126
5.1.4 在集合中使用Lambda表达式 127
5.1.5 在Stream中使用Lambda表达式 128
5.2 接口默认方法 129
5.3 小结 132
第6章 Spring WebFlux响应式编程 133
6.1 传统的编程模型 133
6.2 响应式编程模型 134
6.3 Reactor 135
6.3.1 Flux与Mono 135
6.3.2 subscribe() 137
6.3.3 操作符(Operator) 139
6.3.4 线程模型 144
6.4 Spring WebFlux 146
6.4.1 基于注解的WebFlux开发方式 146
6.4.2 基于函数式的WebFlux开发方式 147
6.5 小结 152
第7章 WebClient响应式客户端 153
7.1 RestTemplate调试Spring MVC 153
7.2 WebClient调试Spring WebFlux 156
7.3 小结 158
第8章 Spring 5结合Kotlin编程 159
8.1 Kotlin简介 159
8.1.1 Kotlin的特性 159
8.1.2 Kotlin基本数据类型 161
8.1.3 Kotlin开发环境搭建 161
8.1.4 在Kotlin中定义常量与变量 162
8.1.5 字符串模板 162
8.1.6 NULL检查机制 163
8.1.7 For循环和区间 163
8.1.8 定义函数 166
8.1.9 类和对象 167
8.1.10 Kotlin与Java互操作 169
8.2 Spring 5集成Kotlin 170
8.3 小结 172
第9章 Spring 5更多新特性 173
9.1 Resource接口 173
9.2 HTTP 2 174
9.2.1 HTTP的现状 174
9.2.2 HTTP 2的新特性 174
9.2.3 多路复用与长连接的区别 175
9.3 JUnit 5 176
9.3.1 JUnit 5简介 176
9.3.2 JUnit 5快速体验 176
9.3.3 JUnit 5常用注解 178
9.4 小结 179

第三篇 Spring系统集成篇

第10章 Spring集成Log4j2 181
10.1 Log4j2配置详解 181
10.2 Log4j2日志级别 184
10.3 Log4j2实战演练 185
10.4 小结 188
第11章 Spring集成Spring MVC 189
11.1 Spring MVC快速体验 189
11.1.1 web.xml配置 189
11.1.2 创建Spring MVC的配置 文件 190
11.1.3 创建Spring MVC的视图 文件 190
11.1.4 创建控制器 191
11.1.5 测试运行 191
11.2 Spring MVC视图呈现 192
11.2.1 FreeMarker视图的实现 192
11.2.2 XML视图的实现 193
11.2.3 JSON视图的实现 195
11.3 Spring MVC拦截器 196
11.4 Spring MVC代码解析 198
11.5 小结 225
第12章 Spring集成MyBatis 226
12.1 Spring、Spring MVC和MyBatis集成 快速体验 226
12.2 MyBatis代码解析 236
12.3 小结 243
第13章 Spring事务管理 244
13.1 事务的特性 244
13.2 事务的隔离级别 244
13.2.1 READ_UNCOMMITTED 245
13.2.2 READ_COMMITTED 245
13.2.3 REPEATABLE_READ 246
13.2.4 SERIALIZABLE 246
13.3 JDBC方式使用事务 247
13.4 Spring事务管理快速体验 248
13.5 Spring事务隔离级别 254
13.6 Spring事务传播行为 255
13.7 Spring事务代码分析 255
13.8 小结 263
第14章 Spring集成Redis 264
14.1 Redis单节点安装 264
14.2 Redis支持的数据类型 266
14.2.1 Redis String类型的使用 方式 266
14.2.2 Redis Hash类型的使用 方式 271
14.2.3 Redis List类型的使用 方式 274
14.2.4 Redis Set类型的使用 方式 277
14.2.5 Redis SortedSet类型的使用 方式 280
14.3 Redis持久化策略 284
14.3.1 Redis RDB持久化 284
14.3.2 Redis AOF持久化 285
14.4 Redis主从复制模式 287
14.4.1 Redis一主一从拓扑结构 289
14.4.2 Redis一主多从拓扑结构 289
14.4.3 Redis树形拓扑结构 290
14.4.4 Redis主从架构的缺点 291
14.5 Redis哨兵模式 291
14.5.1 Redis哨兵模式简介 291
14.5.2 Redis哨兵定时监控任务 292
14.5.3 主观下线和客观下线 294
14.5.4 Redis哨兵选举领导者 295
14.5.5 故障转移 295
14.5.6 Redis哨兵模式安装部署 296
14.6 Redis集群模式 302
14.6.1 Redis集群模式数据共享 303
14.6.2 Redis集群中的主从复制 303
14.6.3 Redis集群中的一致性 问题 303
14.6.4 Redis集群架构 304
14.6.5 Redis集群容错 304
14.6.6 Redis集群环境搭建 305
14.7 Spring、MyBatis和Redis集成快速 体验 313
14.8 Redis缓存穿透和雪崩 323
14.8.1 Redis缓存穿透 323
14.8.2 Redis缓存雪崩 326
14.9 小结 329
第15章 Spring集成ZooKeeper 330
15.1 ZooKeeper集群安装 330
15.2 ZooKeeper总体架构 336
15.2.1 ZooKeeper选举机制 336
15.2.2 ZooKeeper数据模型 338
15.3 Spring集成ZooKeeper快速体验 342
15.4 ZooKeeper发布订阅 346
15.4.1 NodeCache 346
15.4.2 PathChildrenCache 349
15.4.3 TreeCache 352
15.5 ZooKeeper分布式锁 356
15.6 小结 361
第16章 Spring集成Kafka 362
16.1 Kafka集群安装 362
16.2 Kafka总体架构 365
16.3 Spring集成Kafka快速体验 374
16.4 小结 377
第17章 Spring集成Mycat 379
17.1 Mycat分库分表 379
17.2 Mycat分库分表实战 381
17.3 Spring MyBatis Mycat快速体验 386
17.4 小结 397
第18章 Spring集成Sharding-JDBC 398
18.1 Spring集成Sharding-JDBC快速 体验 398
18.2 Sharding-JDBC强制路由 407
18.3 Sharding-JDBC分布式主键 408
18.4 小结 413
第19章 Spring集成Dubbo 414
19.1 远程过程调用协议 414
19.2 Spring集成Dubbo快速体验 415
19.3 Dubbo代码分析 419
19.4 小结 452
附录A 设计模式 453
A.1 工厂模式 453
A.2 抽象工厂模式 456
A.3 单例模式 462
A.4 建造者模式 463
A.5 原型模式 468
A.6 适配器模式 472
A.7 桥接模式 476
A.8 标准模式 477
A.9 组合模式 481
A.10 装饰器模式 483
A.11 外观模式 486
A.12 享元模式 489
A.13 代理模式 491
A.14 责任链模式 493
A.15 命令模式 496
A.16 解释器模式 499
A.17 迭代器模式 502
A.18 中介者模式 504
A.19 备忘录模式 506
A.20 观察者模式 509
A.21 状态 模 式 511
A.22 空对象模式 513
A.23 策略模式 516
A.24 模板模式 519
A.25 拦截过滤器模式 522
参考文献 365





【前言】
前 言
Spring在如今的Java企业开发中占据十分重要的地位。一路走来,作者经历过的上百个项目无一例外都是使用Spring开发的。2017年9月Spring 5发布了通用版本(GA),标志着自 2013年12月以来*个主要Spring Framework版本诞生。本书从企业实战角度出发,讲解*版本的Spring 5.0\5.1的新特性,并将常见互联网技术与Spring集成,力争让读者通过本书能够又快又好地掌握Spring企业级开发技能,并能学以致用。
本书涵盖Spring基础知识讲解,Spring 5新特性和Spring集成开发等知识。本书从结构上可以分三部分,*部分是Spring基础篇,介绍Spring核心概念和原理,涉及第1章~第3章。第二部分是Spring 5高级特性篇,涉及第4章~第9章。第三部分是Spring系统集成篇,主要讲解Spring框架与互联网公司常用的技术集成开发,涉及第10章~第19章。附录部分还介绍了本书涉及的以及在面试中常见的设计模式。
本书结构
本书共19章和1个附录,各章内容概述如下:
第1章 介绍Spring开发所需的环境和工具。包括JDK的安装,Intellij IDEA安装、Tomcat安装和配置、Maven安装。
第2章 对Spring框架核心概念IoC容器进行讲解,并通过代码分析的方式阐述IoC容器的实现原理。
第3章 对Spring框架核心概念AOP进行讲解,并说明如何通过不同的方式实现AOP,*后通过代码解析的方式阐述AOP的实现原理。
第4章 概述Spring 5的新特性。
第5章 概述Java 8的一些新特性,这些特性在Spring 5中得到了支持。
第6章 讲解使用Spring 5的新特性WebFlux进行编程和Reactor编程。
第7章 讲解Spring 5提供的响应式客户端编程。
第8章 讲解Spring 5集成Kotlin进行编程。
第9章 讲解更多Spring 5的新特性及细节。
第10章 讲解Spring集成Log4j2进行日志控制。
第11章 讲解Spring如何集成Spring MVC模块进行Web开发,并分析Spring MVC底层代码实现。
第12章 讲解Spring如何集成MyBatis进行数据库持久层开发,并分析MyBatis框架底层的代码。
第13章 讲解Spring对事务的支持,并分析Spring事务管理的底层代码实现。
第14章 讲解Spring集成Redis开发,并分析Redis各种不同部署方式之间的区别,本章*后分享在高并发场景下使用Redis需要注意的一些要点。
第15章 讲解ZooKeeper如何进行开发,并分析ZooKeeper在特定场景下的一些高级用法。
第16章 讲解Spring如何集成Kafka进行开发,并分析Kafka的核心架构。
第17章 讲解Spring如何集成Mycat进行分库分表开发,及如何将Spring、Mybatis和Mycat集成进行数据库持久化层的开发。
第18章 讲解Spring如何集成Sharding-JDBC进行分库分表开发,并讲解一些Sharding-JDBC的高级特性。
第19章 讲解Spring如何集成Dubbo进行RPC服务开发,并分析Dubbo框架的底层代码。
附录A 讲解本书代码分析过程中的设计模式和企业开发过程中常见的设计模式。
本书预备知识
Java基础
需要读者掌握Java SE基础知识,这是*基本的也是*重要的。
Linux基础
本书讲解的Spring集成中间件开发部分,中间件都是基于Linux服务器进行部署的,因此读者应当掌握常用的Linux命令。
数据库基础
本书会涉及Spring对事务的支持和Spring集成Mycat或Sharding-JDBC进行分库分表操作,因此读者对数据库基础知识应有较好的掌握。
分布式系统基础
本书Spring系统集成部分会涉及当前互联网公司比较主流的分布式技术,读者需要对分布式系统的基础知识有一定的了解。
本书使用的软件版本
本书使用到的开发环境如下:
? 操作系统MacOS 10.14.3
? 开发工具Intellij IDEA 2018.1
? JDK版本1.8
? Tomcat 9.0.10
? maven-3.5.0
? Spring*版5.1.5.RELEASE
本书系统集成部分使用到的多种组件的具体版本请参考对应章节。
读者对象
本书适合所有Java编程语言开发人员,所有对Spring 感兴趣的开发人员,对分布式系统感兴趣的开发人员以及对各类技术原理有求知欲的开发人员。
源代码下载
GitHub源代码下载地址:https://github.com/online-demo/spring5projectdemo.git
勘误与交流
限于笔者水平和写作时间有限,欢迎大家通过电子邮件等方式批评指正。
致谢
本书能够顺利出版,首先要感谢清华大学出版社王金柱编辑给笔者一次与各位读者分享技术、交流学习的机会,感谢王金柱编辑在本书出版过程的辛勤付出。感谢好友黄文毅,也是笔者的同事,对笔者在写作思路和排版上的帮助和支持。
感谢汉海信息技术(上海)有限公司(简称美团点评),书中很多的知识点和项目实战经验都来源于“美团点评”,感谢主管章成峰、导师吕波和贾钧翔以及同事叶雄和孙成飞,感谢“饿了么”资深架构师唐斌对笔者技术和学习上的支持,感谢行业前辈杨继龙对笔者职业生涯的提点,感谢笔者的好友黄子涵对笔者写作进度的监督和指导,感谢英语老师吴定山对笔者英语能力的培养。
谨以此书献给我敬爱的父母,愿他们健康长寿。


周冠亚
2019年2月24日



返回顶部