《学透Spring:从入门到项目实战》封面

学透Spring 内容简介

【Spring官方布道师&国内大咖推荐,学透Spring就用兔子书!】

【SpringBoot等10+款常用组件一本通,专注解决Spring入门之后落地难的问题】

本书的目标是让大家又快又好地打包学透Spring技术栈,内容将涉及SpringFramework、SpringBoot、SpringCloud等Spring家族成员。

全书分为四部分:第一部分“Spring入门”,先学习基本的SpringIoC、AOP,随后过渡到当下热门的SpringBoot;第二部分“Spring中的数据操作”,其中既有常规的SQL、NoSQL数据操作,也有进阶的数据源配置和缓存抽象;第三部分“使用Spring开发Web应用”,讲述SpringMVC细节的同时,也不放过Web安全与REST;第四部分“使用Spring开发微服务”,除了常规的SpringCloud模块,也会讲解SpringCloudAlibaba。

学透Spring 作者简介

丁雪丰,美团研究员、技术图书作译者、极客时间《玩转Spring全家桶》课程讲师。获得了“上海市青年金才”“腾讯云最具价值专家”等称号。致力于推动优秀技术在国内的发展,是SpringFramework2.0和SpringFramework2.5官方文档翻译项目的负责人,翻译及原创出版了《SpringBoot实战》《Spring攻略》《RESTfulWebServicesCookbook中文版》等8部图书。曾就职于平安壹钱包、百度与支付宝,在互联网金融、支付等领域积累了丰富的大型系统构建经验。

学透Spring 目录

第一部分Spring入门
第1章初识Spring
1.1认识Spring家族
1.1.1Spring发展历史
1.1.2Spring家族主要成员
1.2编写第一个Spring程序
1.2.1基础环境准备
1.2.2通过SpringInitializr创建工程
1.2.3编写简单的REST服务
1.3实战案例说明
1.3.1需求描述
1.3.2模块说明
1.4小结
第2章SpringFramework中的IoC容器
2.1IoC容器基础知识
2.1.1什么是IoC容器
2.1.2容器的初始化
2.1.3BeanFactory与ApplicationContext
2.1.4容器的继承关系
2.2Bean基础知识
2.2.1什么是Bean
2.2.2Bean的依赖关系
2.2.3Bean的三种配置方式
2.3定制容器与Bean的行为
2.3.1Bean的生命周期
2.3.2Aware接口的应用
2.3.3事件机制
2.3.4容器的扩展点
2.3.5优雅地关闭容器
茶歇时间:Linux环境下如何关闭进程
2.4容器中的几种抽象
2.4.1环境抽象
2.4.2任务抽象
茶歇时间:该怎么配置线程池
茶歇时间:本地调度vs.分布式调度
2.5小结
第3章SpringFramework中的AOP
3.1Spring中的AOP
3.1.1AOP的核心概念
3.1.2SpringAOP的实现原理
茶歇时间:使用代理模式过程中的小坑
3.2基于@AspectJ的配置
3.2.1声明切入点
茶歇时间:SpringAOP与AspectJ中PCD的不同之处
3.2.2声明通知
3.2.3基于@AspectJ的示例
3.3基于XMLSchema的配置
3.3.1声明切入点
3.3.2声明通知
3.3.3通知器
3.3.4基于XMLSchema的示例
茶歇时间:超简洁的JUnit单元测试入门
3.4小结
第4章从SpringFramework到SpringBoot
4.1SpringBoot基础知识
4.1.1为什么需要SpringBoot
4.1.2SpringBoot的组成部分
4.1.3解析SpringBoot工程
4.2起步依赖
4.2.1SpringBoot内置的起步依赖
4.2.2起步依赖的实现原理
4.3自动配置
4.3.1自动配置的实现原理
茶歇时间:通过ImportSelector选择性导入配置
4.3.2配置项加载机制详解
4.4编写我们自己的自动配置与起步依赖
4.4.1编写自己的自动配置
4.4.2脱离SpringBoot实现自动配置
4.4.3编写自己的起步依赖
4.5小结
第5章面向生产的SpringBoot
5.1SpringBootActuator概述
5.1.1端点概览
5.1.2端点配置
茶歇时间:针对Web和Actuator使用不同端口的好处
5.1.3定制端点信息
5.1.4开发自己的组件与端点
茶歇时间:为什么要优先通过ObjectProvider获取Bean
5.2基于Micrometer的系统度量
5.2.1Micrometer概述
5.2.2常用度量指标
5.2.3自定义度量指标
茶歇时间:性能分析时的95线与99线是什么含义
5.2.4度量值的输出
5.3部署SpringBoot应用程序
5.3.1可执行Jar及其原理
5.3.2构建启动代码
茶歇时间:如何优雅地关闭系统
5.3.3启动后的一次性执行逻辑
茶歇时间:通过Lombok简化代码
5.4小结
第二部分Spring中的数据操作
第6章Spring中的JDBC
6.1配置数据源
6.1.1数据库连接池
茶歇时间:HikariCP为什么说自己比别人快
6.1.2数据源配置详解
茶歇时间:使用Docker简化本地开发环境的准备工作
6.2使用JDBC操作数据库
6.2.1查询类操作
6.2.2变更类操作
6.2.3批处理操作
6.2.4自动配置说明
6.3事务管理
6.3.1SpringFramework的事务抽象
6.3.2Spring事务的基本配置
6.3.3声明式事务
茶歇时间:通常事务加在哪层比较合适
茶歇时间:声明式事务背后的原理
6.3.4编程式事务
6.4异常处理
6.4.1统一的异常抽象
6.4.2自定义错误码处理逻辑
6.5小结
第7章对象关系映射
7.1通过Hibernate操作数据库
7.1.1Hibernate与JPA
7.1.2定义实体对象
茶歇时间:为什么一定要用Money类来表示金额
茶歇时间:OpenSessionInView问题
7.1.3通过HibernateAPI操作数据库
7.1.4通过SpringData的Repository操作数据库
茶歇时间:JpaRepository背后的原理
7.2通过MyBatis操作数据库
7.2.1定义MyBatis映射
7.2.2在Spring中配置并使用MyBatis
7.2.3提升MyBatis的开发效率
7.3小结
第8章数据访问进阶
8.1连接池的实用配置
8.1.1保护敏感的连接配置
8.1.2记录SQL语句执行情况
8.1.3Druid的Filter扩展
8.2在Spring工程中访问Redis
8.2.1配置Redis连接
茶歇时间:Redis的几种部署模式
8.2.2Redis的基本操作
茶歇时间:本地缓存vs.分布式缓存
8.2.3通过Repository操作Redis
茶歇时间:多种不同的Repository如何共存
8.3Spring的缓存抽象
8.3.1基于注解的方法缓存
8.3.2替换不同的缓存实现
8.4小结
第三部分使用Spring开发Web应用
第9章SpringMVC实践
9.1简单上手SpringMVC
9.1.1SpringMVC概览
9.1.2编写一个简单的控制器
9.2SpringMVC的请求处理逻辑
9.2.1请求的处理流程
茶歇时间:Servlet的基础知识
9.2.2请求处理方法
茶歇时间:请求处理过程中遇到的几个作用范围
茶歇时间:SpringBoot自动配置
预埋的扩展点
9.3SpringMVC的视图机制
9.3.1视图解析
9.3.2常用视图类型
9.3.3静态资源与缓存
茶歇时间:时间vs.空间
9.4访问Web资源
9.4.1通过RestTemplate访问Web资源
9.4.2RestTemplate的进阶用法
茶歇时间:模板设计模式
9.4.3简单定制RestTemplate
茶歇时间:HttpComponents的Keep-Alive默认策略优化
9.5小结
第10章保护Web安全
10.1认识SpringSecurity
10.1.1模块介绍
10.1.2工作原理
10.2身份认证
10.2.1SpringSecurity的身份认证机制
10.2.2基于用户名和密码的身份认证
茶歇时间:使用SpringSecurity加密保存密码
10.2.3实现“记住我”功能
10.2.4自定义认证方式
10.3访问授权
10.3.1访问授权的判断方式
10.3.2基本的权限配置
10.3.3面向方法的访问授权
茶歇时间:如何忽略权限校验
10.4常见Web攻击防护
10.4.1跨站请求伪造攻击防护
10.4.2会话固定攻击防护
10.4.3跨站脚本攻击防护
10.4.4点击劫持攻击防护
10.4.5引导使用HTTPS
10.5客户端程序的认证
10.5.1几种常见的认证方式
10.5.2用RestTemplate实现简单的认证
10.6小结
第11章Web开发进阶
11.1在SpringMVC中实现AOP
11.1.1使用HandlerInterceptor实现AOP
11.1.2完善异常处理逻辑
11.2调整Web容器
11.2.1更换内嵌Web容器
茶歇时间:不同的Servlet版本与对应的容器
11.2.2调整内嵌Web容器配置
茶歇时间:如何获得HTTPS证书
11.2.3支持HTTP/2
茶歇时间:网站提供的HTTPS服务到底是否安全
11.3支持分布式Session
11.3.1几种常见的解决方案
11.3.2使用SpringSession实现分布式Session
11.4响应式Web
11.4.1了解ProjectReactor
11.4.2使用WebFlux代替WebMVC
茶歇时间:为什么ProjectReactor和WebFlux还没成为主流
11.4.3通过WebClient访问Web资源
11.5小结
第四部分使用Spring开发微服务
第12章微服务与云原生应用
12.1走近微服务
12.1.1什么是微服务
12.1.2微服务的特点
12.2RESTful风格的微服务
12.2.1什么是RESTful风格的微服务
12.2.2设计RESTful风格的微服务
12.2.3了解领域驱动设计
12.3理解云原生
12.3.1什么是云原生应用
12.3.2十二要素应用
12.3.3SpringCloud概述
12.4小结
第13章服务注册与发现
13.1常见的负载均衡方案
13.1.1集中式方案
13.1.2分布式方案
13.2使用SpringCloud实现负载均衡
13.2.1在Zookeeper中注册服务
茶歇时间:为什么Zookeeper不适合做服务注册中心
13.2.2使用SpringCloudLoadBalancer访问服务
茶歇时间:@LoadBalanced是如何工作的
13.2.3使用OpenFeign访问服务
13.3服务注册与发现的抽象与应用
13.3.1服务注册的抽象
13.3.2服务发现的抽象
13.3.3在Consul中注册服务
13.3.4在Nacos中注册服务
茶歇时间:SpringCloudAlibaba概述
13.3.5在Eureka中注册服务
13.4小结
第14章服务配置管理
14.1使用SpringCloudConfig实现配置管理
14.1.1为何需要配置中心
14.1.2基于SpringCloudConfigServer的配置中心
茶歇时间:加解密绕不开的JCE
14.1.3通过SpringCloudConfigClient访问配置
14.2服务配置的实现原理与应用
14.2.1服务配置的实现原理
14.2.2基于Zookeeper的配置中心
14.2.3基于Consul的配置中心
14.2.4基于AlibabaNacos的配置中心
14.3小结
第15章服务容错保护
15.1常见的服务容错模式
15.1.1几种常见的容错模式
15.1.2通过AOP实现简单的容错
15.2使用Resilience4j实现容错
15.2.1使用Resilience4j实现限流
15.2.2使用Resilience4j实现断路
15.2.3使用Resilience4j实现隔离
15.2.4resilience4j-spring-boot2的特别说明
15.3使用SpringCloudCircuitBreaker实现容错
15.3.1通过SpringCloudCircuitBreaker使用Resilience4j
15.3.2通过SpringCloudCircuitBreaker使用Sentinel
15.4小结
第16章服务集成
16.1使用Dubbo进行RPC通信
16.1.1Dubbo概述
16.1.2Dubbo的基础用法
茶歇时间:多个copyProperties()该如何选择
茶歇时间:为什么对外的接口里不要用枚举
16.2使用消息中间件进行异步通信
16.2.1为什么要使用基于消息的异步通信
茶歇时间:常见的消息模型
16.2.2通过SpringAMQP使用RabbitMQ
16.2.3通过SpringCloudStream使用Kafka
茶歇时间:用DockerCompose在本地启动一套Kafka
16.3服务链路追踪
16.3.1链路追踪概述
16.3.2基于SpringCloudSleuth实现链路追踪
茶歇时间:OpenTelemetry概述
16.4基于SpringCloudGateway实现微服务网关
16.4.1什么是微服务网关
16.4.2SpringCloudGateway的路由配置
16.5小结
第五部分附录
附录A从SpringBoot2.x升级到3.0
A.1升级判断标准
A.2升级操作
A.2.1依赖组件升级
A.2.2代码修改
附录B将应用程序打包为Docker镜像
B.1编写Dockerfile
茶歇时间:如何选择基础JavaDocker镜像
B.2构建并运行镜像
B.3构建分层镜像
B.4其他打包方式
附录C通过SpringNative打包本地镜像
C.1GraalVM与SpringNative
C.1.1GraalVM简介
C.1.2SpringNative简介
C.2编译打包本地镜像
C.2.1准备工作
C.2.2调整编译打包配置
C.2.3修改代码
C.2.4其他优化
后记549
······

最后修改:2023 年 11 月 13 日