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

目录

第一部分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 日