欢迎光临
免费的PDF电子书下载网站

Spring 5核心原理与30个类手写实战 PDF下载

编辑推荐

适读人群 :十年沉淀之作,手写Spring精华思想,21万 学员听过在线课,超强实战技术升级指南,囊括源码、设计思想、架构思维、实战案例、开发经验,Java架构师成长必备

★《Spring 5核心原理与30个类手写实战》对应在线课程有21万 学员听过,付费学员有1.3万

★《Spring 5核心原理与30个类手写实战》作者Tom老师有10余年Java开发经验,对Spring有深入研究及独特见解

★本书几乎涵盖在Spring应用中可能遇到的所有问题,核心原理(IoC、DI、AOP、MVC)、高仿手写、数据访问等

★深度解析Spring 5的原理与新特性,从环境准备、顶层结构设计、数据访问等方面一步步推导出Spring设计原理

★通过本书你可以:

--看源码不再晕车,轻松找到入口。

--系统学习设计思想,提高解决问题的效率。

--培养架构思维能力,自驱学习能力。

--用30个类提炼出Spring核心的精华思想,并保证功能可用。

--从不一样的角度分析Spring经典高频面试题。

--了解Spring 5 的新特性。

--为深入了解Spring Boot做铺垫。

 ;

适读人群 :十年沉淀之作,手写Spring精华思想,21万 学员听过在线课,超强实战技术升级指南,囊括源码、设计思想、架构思维、实战案例、开发经验,Java架构师成长必备

★《Spring 5核心原理与30个类手写实战》对应在线课程有21万 学员听过,付费学员有1.3万

★《Spring 5核心原理与30个类手写实战》作者Tom老师有10余年Java开发经验,对Spring有深入研究及独特见解

★本书几乎涵盖在Spring应用中可能遇到的所有问题,核心原理(IoC、DI、AOP、MVC)、高仿手写、数据访问等

★深度解析Spring 5的原理与新特性,从环境准备、顶层结构设计、数据访问等方面一步步推导出Spring设计原理

★通过本书你可以:

--看源码不再晕车,轻松找到入口。

--系统学习设计思想,提高解决问题的效率。

--培养架构思维能力,自驱学习能力。

--用30个类提炼出Spring核心的精华思想,并保证功能可用。

--从不一样的角度分析Spring经典高频面试题。

--了解Spring 5 的新特性。

--为深入了解Spring Boot做铺垫。

内容简介

本书基于编程开发实践,不仅深度解析Spring 5的原理与新特性,更从环境准备、顶层结构设计、数据访问等方面一步步地推导出Spring的设计原理。在每个知识点上,均以大量的经典代码案例辅助讲解,使理论紧密联系实际。*后手写30个类,以体会Spring作者的创作过程,让每一位读者学以致用。

对于立志成为Java架构师的技术人员,以及对以Spring为核心的Java Web开发感兴趣的计算机专业高校生、在职Java开发人员来说,本书是一本具备超强实战意义的技术升级指南。读者通过本书可以看源码不再“晕车”,轻松找到入口;系统学习设计思想,提高解决问题的效率;培养架构思维能力,以及自驱学习能力。

作者简介

谭勇德(Tom)

10余年Java开发经验。咕泡学院联合创始人。在大型IT公司担任过CTO、系统架构师。精通Java语言、JS、CSS、AS、PHP等;负责过多个大型分布式系统的微服务架构的技术改造;多年以来对Spring框架有深入研究及独特见解;开发过多套企业内部UI框架和ORM框架。热衷于分享经验,共同进步。不只做一个技术者,更要做一个思考者。

Spring 5核心原理与30个类手写实战 PDF下载

目录

第1篇 Spring内功心法
第1章 软件架构设计原则 2
1.1 开闭原则 2
1.2 依赖倒置原则 4
1.3 单一职责原则 7
1.4 接口隔离原则 10
1.5 迪米特原则 12
1.6 里氏替换原则 14
1.7 合成复用原则 19
1.8 设计原则总结 20
第2章 Spring中常用的设计模式 21
2.1 为什么要从设计模式开始 21
2.1.1 写出优雅的代码 22
2.1.2 更好地重构项目 24
2.1.3 经典框架都在用设计模式解决问题 36
2.2 工厂模式详解 36
2.2.1 工厂模式的由来 36
2.2.2 简单工厂模式 37
2.2.3 工厂方法模式 41
2.2.4 抽象工厂模式 43
2.2.5 利用工厂模式重构的实践案例 47
2.3 单例模式详解 53
2.3.1 单例模式的应用场景 53
2.3.2 饿汉式单例模式 53
2.3.3 懒汉式单例模式 54
2.3.4 反射破坏单例 60
2.3.5 序列化破坏单例 61
2.3.6 注册式单例模式 68
2.3.7 线程单例实现ThreadLocal 74
2.3.8 单例模式小结 75
2.4 原型模式详解 75
2.4.1 原型模式的应用场景 75
2.4.2 浅克隆 77
2.4.3 深克隆 79
2.4.4 克隆破坏单例模式 81
2.4.5 clone()方法的源码 82
2.5 代理模式详解 82
2.5.1 代理模式的应用场景 82
2.5.2 静态代理 83
2.5.3 动态代理 88
2.5.4 代理模式与Spring 107
2.5.5 静态代理和动态代理的本质区别 108
2.5.6 代理模式的优缺点 109
2.6 委派模式详解 109
2.6.1 委派模式的定义及应用场景 109
2.6.2 委派模式在源码中的体现 111
2.7 策略模式详解 .114
2.7.1 策略模式的应用场景 114
2.7.2 用策略模式实现选择支付方式的业务场景 .114
2.7.3 策略模式在JDK源码中的体现 122
2.7.4 策略模式的优缺点 125
2.7.5 委派模式与策略模式综合应用 125
2.8 模板模式详解 129
2.8.1 模板模式的应用场景 129
2.8.2 利用模板模式重构JDBC操作业务场景 132
2.8.3 模板模式在源码中的体现 136
2.8.4 模板模式的优缺点 138
2.9 适配器模式详解139
2.9.1 适配器模式的应用场景 139
2.9.2 重构第三方登录自由适配的业务场景141
2.9.3 适配器模式在源码中的体现 149
2.9.4 适配器模式的优缺点 153
2.10 装饰者模式详解 153
2.10.1 装饰者模式的应用场景 153
2.10.2 装饰者模式和适配器模式对比 163
2.10.3 装饰者模式在源码中的应用 163
2.10.4 装饰者模式的优缺点 165
2.11 观察者模式详解 165
2.11.1 观察者模式的应用场景 165
2.11.2 观察者模式在源码中的应用 175
2.11.3 基于Guava API轻松落地观察者模式 176
2.11.4 观察者模式的优缺点 177
2.12 各设计模式的总结与对比 177
2.12.1 GoF 23种设计模式简介 177
2.12.2 设计模式之间的关联关系 178
2.12.3 Spring中常用的设计模式 182
2.13 Spring中的编程思想总结 183
第2篇 Spring环境预热
第3章 Spring的前世今生 186
3.1 一切从Bean开始 187
3.2 Spring的设计初衷 188
3.3 BOP编程伊始 188
3.4 理解BeanFactory 189
3.5 AOP编程理念 189
第4章 Spring 5系统架构 191
4.1 核心容器 192
4.2 AOP和设备支持192
4.3 数据访问与集成193
4.4 Web组件 194
4.5 通信报文 194
4.6 集成测试 194
4.7 集成兼容 194
4.8 各模块之间的依赖关系 194
第5章 Spring版本命名规则 196
5.1 常见软件的版本命名 196
5.2 语义化版本命名通行规则 197
5.3 商业软件中常见的修饰词 197
5.4 软件版本号使用限定 198
5.5 Spring版本命名规则 199
第6章 Spring源码下载及构建技巧 200
6.1 Spring 5源码下载 200
6.2 基于Gradle的源码构建技巧 201
6.3 Gradle构建过程中的坑 207
第3篇 Spring核心原理
第7章 用300行代码手写提炼Spring核心原理 210
7.1 自定义配置 210
7.1.1 配置application.properties文件 210
7.1.2 配置web.xml文件 210
7.1.3 自定义注解 211
7.1.4 配置注解 212
7.2 容器初始化 213
7.2.1 实现1.0版本 213
7.2.2 实现2.0版本 216
7.2.3 实现3.0版本 223
7.3 运行效果演示 227
第8章 一步一步手绘Spring IoC运行时序图 228
8.1 Spring核心之IoC容器初体验 228
8.1.1 再谈IoC与DI 228
8.1.2 Spring核心容器类图 229
8.1.3 Web IoC容器初体验 232
8.2 基于XML的IoC容器的初始化 237
8.2.1 寻找入口 238
8.2.2 获得配置路径 238
8.2.3 开始启动 240
8.2.4 创建容器 242
8.2.5 载入配置路径 243
8.2.6 分配路径处理策略 244
8.2.7 解析配置文件路径 247
8.2.8 开始读取配置内容 249
8.2.9 准备文档对象 250
8.2.10 分配解析策略 251
8.2.11 将配置载入内存 252
8.2.12 载入<bean>元素 257
8.2.13 载入<property>元素 261
8.2.14 载入<property>子元素 264
8.2.15 载入<list>子元素 266
8.2.16 分配注册策略 267
8.2.17 向容器注册 267
8.3 基于注解的IoC初始化 270
8.3.1 注解的前世今生 270
8.3.2 定位Bean扫描路径 271
8.3.3 读取注解的元数据 273
8.3.4 扫描指定包并解析为BeanDefinition 277
8.3.5 注册注解BeanDefinition 283
8.4 IoC容器初始化小结 285
第9章 一步一步手绘Spring DI运行时序图 287
9.1 Spring自动装配之依赖注入 287
9.1.1 依赖注入发生的时间 287
9.1.2 寻找获取Bean的入口 288
9.1.3 开始实例化 293
9.1.4 选择Bean实例化策略 297
9.1.5 执行Bean实例化 299
9.1.6 准备依赖注入 301
9.1.7 解析属性依赖注入规则 306
9.1.8 注入赋值 310
9.2 Spring IoC容器中那些鲜为人知的细节 314
9.2.1 关于延时加载 314
9.2.2 关于FactoryBean和BeanFactory 317
9.2.3 再述autowiring 322
第10章 一步一步手绘Spring AOP运行时序图 326
10.1 Spring AOP初体验 326
10.1.1 再述Spring AOP应用场景 326
10.1.2 AOP中必须明白的几个概念 327
10.1.3 使用Spring AOP的两种方式 329
10.1.4 切入点表达式的配置规则 333
10.2 Spring AOP源码分析 334
10.2.1 寻找入口 334
10.2.2 选择代理策略 338
10.2.3 调用代理方法 341
10.2.4 触发通知 347
第11章 一步一步手绘Spring MVC运行时序图 352
11.1 初探Spring MVC请求处理流程 352
11.2 Spring MVC九大组件 353
11.2.1 HandlerMapping 353
11.2.2 HandlerAdapter 353
11.2.3 HandlerExceptionResolver 354
11.2.4 ViewResolver 354
11.2.5 RequestToViewNameTranslator 354
11.2.6 LocaleResolver 354
11.2.7 ThemeResolver 355
11.2.8 MultipartResolver 355
11.2.9 FlashMapManager 355
11.3 Spring MVC源码分析 355
11.3.1 初始化阶段 356
11.3.2 运行调用阶段 359
11.4 Spring MVC优化建议 367
第4篇 Spring手写实战
第12章 环境准备 370
12.1 IDEA集成Lombok插件 370
12.1.1 安装插件 370
12.1.2 配置注解处理器 373
12.1.3 使用插件 374
12.2 从Servlet到ApplicationContext 375
12.3 准备基础配置376
12.3.1 application.properties配置.377
12.3.2 pom.xml配置 377
12.3.3 web.xml配置 378
12.3.4 GPDispatcherServlet 378
第13章 IoC顶层结构设计 380
13.1 Annotation(自定义配置)模块 380
13.1.1 @GPService 380
13.1.2 @GPAutowired 381
13.1.3 @GPController 381
13.1.4 @GPRequestMapping 382
13.1.5 @GPRequestParam 382
13.2 core(顶层接口)模块 382
13.2.1 GPFactoryBean 382
13.2.2 GPBeanFactory 383
13.3 beans(配置封装)模块 383
13.3.1 GPBeanDefinition 383
13.3.2 GPBeanWrapper 384
13.4 context(IoC容器)模块 385
13.4.1 GPAbstractApplicationContext 385
13.4.2 GPDefaultListableBeanFactory 385
13.4.3 GPApplicationContext385
13.4.4 GPBeanDefinitionReader 388
13.4.5 GPApplicationContextAware 391
第14章 完成DI模块的功能 392
14.1 从getBean()方法开始 393
14.2 GPBeanPostProcessor 395
第15章 完成MVC模块的功能 396
15.1 MVC顶层设计 396
15.1.1 GPDispatcherServlet 396
15.1.2 GPHandlerMapping 402
15.1.3 GPHandlerAdapter 403
15.1.4 GPModelAndView 406
15.1.5 GPViewResolver 406
15.1.6 GPView 407
15.2 业务代码实现409
15.2.1 IQueryService 409
15.2.2 QueryService 410
15.2.3 IModifyService 410
15.2.4 ModifyService 411
15.2.5 MyAction 412
15.2.6 PageAction 413
15.3 定制模板页面414
15.3.1 first.html 414
15.3.2 404.html 414
15.3.3 500.html 415
15.4 运行效果演示415
第16章 完成AOP代码织入 417
16.1 基础配置 .

媒体评论

本书是基于Spring 5开发的架构师实战指南,几乎涵盖在Spring应用中可能遇到的所有问题,包括核心原理(IOC、DI、AOP、MVC)、高仿手写、数据访问等。

——James

咕泡学院联合创始人

 ;

如果你想成为架构师,恭喜你遇到了这本书;如果你不想成为架构师,请把本书介绍给需要的人。

——Mic

咕泡学院联合创始人

本书是基于Spring 5开发的架构师实战指南,几乎涵盖在Spring应用中可能遇到的所有问题,包括核心原理(IOC、DI、AOP、MVC)、高仿手写、数据访问等。

——James

咕泡学院联合创始人

 ;

如果你想成为架构师,恭喜你遇到了这本书;如果你不想成为架构师,请把本书介绍给需要的人。

——Mic

咕泡学院联合创始人

前沿

★序言
  在1996年,Java还只是一门新兴的、初出茅庐的编程语言。2004年3月24日,Spring正式对外发布1.0版本。我在2009年开始接触Spring 2.0,从此爱不释手。Spring的出现,恰如其名,开启了全世界Java程序员的春天。如今,Spring已然成为一个生态,使用Spring简直就是一种享受。
  本书结合我多年的Spring使用经验,整理了珍藏多年的Spring学习笔记,采用类图和代码片段的形式,加以中文注释,通俗、生动、全面、深入地剖析了Spring源码的重要细节。要想练就“降龙十八掌”,先得修炼内功。本书从设计模式开始讲解,以帮助大家更好地理解Spring,让大家知其然,且知其所以然。
  如果你现在的工作经验与应有的能力无法匹配,
  如果你在自学路上找不到方向,
  如果你现在是初级程序员,想往高级程序员晋级,
  如果你希望成为架构师,
  ……
  本书都能帮到你。
  编写本书旨在使大家进入不一样的思维境界,书中个人观点若有不妥之处,恳望纠正!
  编写本书旨在使大家进入不一样的思维境界,手写源码不是为了重复造轮子,也不是为了装高大上,其实只是我推荐给大家的一种学习方式。
  书中个人观点若有不妥之处,恳望纠正!
  ★关于我
  为什么说我来自文艺界?
  我自幼爱好书法和美术,长了一双能书会画的手,而且手指又长又白,因此以前的艺名叫“玉手藝人”。中学期间,曾获市级书法竞赛一等奖,校园美术竞赛一等奖,校园征文比赛二等奖。担任过学生会宣传部长,负责校园黑板报、校园刊物的编辑、排版、设计。
  2008年参加工作后,做过家具建模、平面设计等工作,亲自设计了咕泡学院的Logo。做讲师之后,给自己起了一个跟姓氏谐音的英文名字“Tom”,江湖人称“编程界写字写得最好的、书法界编程最牛的文艺汤”。
  我的技术生涯
  我的IT技术生涯应该算是从2009年开始的,在此之前做过UI设计,做过前端网页,到2009年才真正开始参与Java后台开发。在这里要感谢所有帮助过我入门编程的同事和老师。从2010年至2014年担任过项目组长、项目经理、架构师、技术总监,对很多的开源框架建立了自己的独特见解。我会习惯性地用形象思维来理解抽象世界。譬如:看到二进制0和1,我会想到《周易》中的两仪——阴和阳;看到颜色值用RGB表示,我会想到美术理论中的太阳光折射三原色;下班回家看到炒菜流程,我会想到模板方法模式;坐公交车看到学生卡、老人卡、爱心卡,我会想到策略模式;等等。大家看到的这本书,很多地方都融入了这种形象思维。
  为什么写书?
  其实一开始我没想过要写书,写书的初衷主要是满足学员的诉求。大家认为我个人的学习方法、思维模式、教学方式通俗易懂,很容易让人接受,但是通过视频形式传播受众有限,学员建议我把这些宝贵的经验以纸质书的形式奉献给大家,这样定会给社会带来更大的价值。
  借此机会,特别感谢责任编辑董英及电子社的团队成员为本书审稿纠错;感谢我老婆在无数个加班的夜晚给我默默的支持;感谢咕泡学院的学员给本书内容提出宝贵的修改意见。
  谭勇德(Tom)
  2019年5月 于 长沙

免费在线读

 ;  ;  ; Spring 5于2017年9月发布了通用版本,它是自2013年12月以来第一个主要的Spring版本。它提供了一些人们期待已久的改进,还采用了一种全新的编程范例,以反应式原则为基础。
  这个版本是很长时间以来最令人激动的版本。Spring 5兼容Java?8和JDK 9,它集成了反应式流,以方便后续提供一种颠覆性方法来实现端点和Web应用程序开发。
  当然,反应式编程不仅是此版本的主题,还是令许多程序员激动不已的重大特性。人们对能够针对负载波动进行无缝扩展的容灾和响应式服务的需求在不断增加,Spring 5很好地满足了这一需求。
  下面介绍Java SE 8和Java EE 7 API升级的基本内容、Spring 5的新反应式编程模型、对HTTP/2的支持,以及Spring通过Kotlin对函数式编程的全面支持。还会简要介绍测试和性能增强,最后介绍对Spring核心和容器的一般性修订。
  20.1 升级到Java SE 8和Java EE 7
  以前的Spring一直在支持一些弃用的Java版本,而Spring 5已从“旧包袱”中解放出来。为了充分利用Java 8的特性,它的代码库已进行了改进,而且要求将Java 8作为最低的JDK版本。
  Spring 5在类路径(和模块路径)上完全兼容Java 9,而且它通过了JDK 9测试套件的测试。对Java 9爱好者而言,这是一个好消息。
  在API级别上,Spring 5兼容Java EE 8技术,满足对Servlet 4.0、Bean Validation 2.0和全新的JSON Binding API的需求。对Java EE API的最低要求为V7,该版本引入了针对Servlet、JPA和Bean Validation API的次要版本。
  20.2 反应式编程模型
  Spring 5最令人兴奋的新特性是它的反应式编程模型。Spring 5基于一种反应式基础而构建,而且是完全异步和非阻塞的。只需少量的线程,新的事件循环执行模型就可以垂直扩展。
  Spring 5采用反应式流来提供在反应式组件中传播负压的机制。负压是一个确保来自多个生产者的数据不会让使用者不堪重负的概念。
  Spring WebFlux是Spring 5的反应式核心,它为开发人员提供了两种为Spring Web编程而设计的编程模型:基于注解的模型和Functional Web Framework(WebFlux.fn)。
  基于注解的模型是Spring Web MVC的现代替代方案,该模型基于反应式基础而构建,而Functional Web Framework是基于@Controller注解的编程模型的替代方案。这些模型都通过同一种反应式规则来运行,后者调整非阻塞HTTP来适应反应式流API。
  20.3 使用注解进行编程
  Web MVC程序员应该对Spring 5的基于注解的编程模型非常熟悉,Spring 5调整了Web MVC的@Controller编程模型,采用了相同的注解。
  在下面的代码中BookController类提供了两个方法,分别响应针对某个图书列表的HTTP请求,以及针对具有给定id的图书的HTTP请求。请注意Mono和Flux等对象。这些对象是实现反应式流规范中的Publisher接口的反应式类型,它们的职责是处理数据流。Mono对象处理一个仅含1个元素的流,而Flux表示一个包含N个元素的流。
  @RestController
  public class BookController { //反应式控制器
  @GetMapping("/book")
  Flux list() {
  return this.repository.findAll();
  }
  @GetMapping("/book/{id}")
  Mono findById(@PathVariable String id) {
  return this.repository.findOne(id);
  }
  }
  以上是针对Spring Web编程的注解,下面我们使用函数式Web框架来解决同一个问题。
  20.4 函数式编程
  Spring 5的函数式方法将请求委托给处理函数,这些函数接收一个服务器请求实例并返回一种反应式类型。来看一段代码,创建BookHandler类,其中listBooks()和getBook()方法相当于Controller中的功能。
  public class BookHandler {
  public Mono listBooks(ServerRequest request) {
  return ServerResponse.ok()
  .contentType(APPLICATION_JSON)
  .body(repository.allPeople(), Book.class);
  }
  public Mono getBook(ServerRequest request) {
  return repository.getBook(request.pathVariable("id"))
  .then(book ->; ServerResponse.ok()
  .contentType(APPLICATION_JSON)
  .body(fromObject(book)))
  .otherwiseIfEmpty(ServerResponse.notFound().build());
  }
  }
  通过路由函数来匹配HTTP请求参数与媒体类型,将客户端请求路由到处理函数。下面的代码展示了图书资源端点URI将调用委托给合适的处理函数:
  BookHandler handler = new BookHandler();
  RouterFunction personRoute =
  route(
  GET("/books/{id}")
  .and(accept(APPLICATION_JSON)), handler::getBook)
  .andRoute(
  GET("/books")
  .and(accept(APPLICATION_JSON)), handler::listBooks);
  这些示例背后的数据存储也支持完整的反应式体验,该体验是通过Spring Data对反应式 Couchbase、Reactive MongoDB和Cassandra的支持来实现的。
  20.5 使用 REST 端点执行反应式编程
  新的编程模型脱离了传统的Spring Web MVC模型,引入了一些很不错的新特性。
  举例来说,WebFlux模块为RestTemplate提供了一种完全非阻塞、反应式的替代方案,名为WebClient。下面创建一个WebClient,并调用books端点来请求一本给定id为1234的图书。
  //通过WebClient调用REST端点
  Mono book = WebClient.create("http://localhost:8080")
  .get()
  .url("/books/{id}", 1234)
  .accept(APPLICATION_JSON)
  .exchange(request)
  .then(response ->; response.bodyToMono(Book.class));
  20.6 支持HTTP/2
  HTTP/2提高了传输性能,减少了延迟,并提高了应用程序的吞吐量,从而提供了丰富的Web体验。
  Spring 5提供专门的HTTP/2特性支持,还支持人们期望出现在JDK 9中的新HTTP客户端。尽管HTTP/2的服务器推送功能已通过Jetty Servlet引擎的ServerPushFilter类向Spring开发人员公开很长一段时间了,但如果发现Spring 5中开箱即用地提供了HTTP/2性能增强,Web优化者们一定会为此欢呼雀跃。
  Spring 5.1提供Servlet 4.0,HTTP/2新特性将由Tomcat 9.0、Jetty 9.3和Undertow 1.4原生提供。
  20.7 Kotlin和Spring WebFlux
  (其他特性详细说明请见原书…………)
  ……

Spring 5核心原理与30个类手写实战 pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:Spring 5核心原理与30个类手写实战