80W 美团架构师整理分享出了 Spring5 企业级开发实战文档
前言
Spring 作为一个互联网公司的必备框架,由 Rod Johnson 创建。
它是为了解决企业应用开发的复杂性而创建的,为应用提供一站式(one-stopshop)的解决方案。
Spring 的发展日新月异,已经进化到了 5.0 的阶段,本文除了透彻地介绍了 Spring 标准的模块之外,把 5.0 的新特征很翔实地展示给了读者,实例也很精炼,此外,Spring 和其他模块集成的快速体验也实战化,给读者能快速地实战落地提供了良好的指导。
本文很好地讲述了 Spring 5 在实际开发应用场景中的各种重要核心技术和最新实用技术,深入浅出地论述了每个技术的应用场景,解释深入,通俗易懂。不仅适合入门者系统地学习 Spring 技术,也适合有一定工作经验的人来加强和深入对 Spring 的理解,是质量很高的 Spring 技术好文。
本文将从目录、主要内容包含的具体章节、总结三部分给大家进行介绍,希望大家能够仔细阅读,并且能够吸收,也希望大家能够喜欢!!
目录
主要内容
全文总共包含三大部分,19 章的内容和一个附录,具体内容接下来给大家来介绍:
第一篇 Spring 基础篇;
第 1 章环境搭建;本章主要介绍了 Spring 技术体系的构成,并初步讲解了构建 Spring 项目需要用到的一些开发工具的安装和使用。通过 Spring 构建一个简单的 Spring MVC 项目,再通过浏览器访问 Spring MVC 项目提供的 HTTP 接口,即可打印文字,例如 Hello World。下一章将讲解 Spring 框架的核心概念——loC。
第 2 章 Spring loC 容器原理;本章主要介绍了 Spring 框架最核心的概念之一——loC,并通过案例讲解了 loC 的实现方式,从 Spring 代码入手,分析了 Spring loC 容器的启动过程,并通过案例讲解了 Spring loC 容器中 Bean 的生命周期,至此 Spring 核心 loC 分析完毕。下一章将讲解 Spring 框架的另一个核心概念——AOP。
第 3 章 Spring AOP 揭秘;本章讲解了 Spring 核心功能 AOP 的使用,并通过对代码的分析,揭示了 JDK 动态代理和 CGLIB 动态代理的实现原理。下一章将介绍 Spring 5 的新特性。
第二部分是 Spring 5 高级特性篇;
第 4 章 Spring 5 新特性概述;
第 5 章 Java 8 新特性概述;本章主要介绍了 Java8 重要的新特性,我们在使用 Spring 5 编程和创建项目都会用到,希望大家了解和掌握。
第 6 章 Spring WebFlux 响应式编程;本章讲解 Spring 5 新特性之 Spring WebFlux 响应式编程,WebFlux 可以作为 Spring MVC 的替代方案,以异步非阻塞的方式实现编程,从而提高系统性能。Spring WebFlux 依赖于 Reactor,本章 6.3 节介绍的是 Reactor 的一些入门知识,如需更多 Reactor 高级特性参考 Reactor 官网。
第 7 章 WebClient 响应式客户端;本章介绍与 Spring WebFlux 配套使用的客户端工具 WebClient,并对比 RestTemplate 与 WebClient 的使用,介绍了使用了 WebClient 一些常见的与 Http 请求相关的方法。通过使用 WebFlux 可以更加方便地对 WebFlux 响应式编程进行运行和调试。
第 8 章 Spring 5 结合 Kotlin 编程;Kotlin 允许开发者使用简洁而优雅的代码来实现与 Java 同样的功能,同时提供对现有的 Java 类库的互操作性。Spring 框架提供了 Kotlin 支持,使得 Java 开发可以方便地使用 Kotlin,同时也允许 Kotlin 开发者无缝使用 Spring 框架。
第 9 章 Spring 5 更多新特性;Spring 5 对 HTTP/2 的支持和对 Junit 5 的支持将带给开发者更好的用户体验,提升开发者的开发效率。
第三部分是 Spring 系统集成篇,
第 10 章 Spring 集成 Log4j2;本章介绍 SLF4J 与 Log4j2 配合使用的原理,并介绍了门面设计模式的相关知识,更多有关设计模式的知识请参见本书附录。
本章 10.3 节实战演练部分介绍了常见的企业开发中的 Log4j2 的配置,读者可以将其中的配置运用到自己的生产实践中,输出更丰富的系统运行中的日志,为监控系统稳定性提供更好的保障。
第 11 章 Spring 集成 Spring MVC;Spring MVC 是企业开发过程中应用最多的 Web 层框架,Spring MVC 在面试中也经常被问到的,并且大部分面试题的侧重点是有关 Spring MVC 底层原理和对 Spring MVC 代码的学习。因此本章对 Spring MVC 代码的解析是十分有必要的。
第 12 章 Spring 集成 MyBatis;MyBatis 是企业开发中最常用的 ORM 框架之一,本章通过 MyBatis 与 Spring、Spring MVC 集成阐述了一个常见的企业开发中使用 MyBatis 的场景;并通过对 MyBatis 的底层代码分析阐述了 MyBatis 的运行原理。
第 13 章 Spring 事务管理;Spring 事务管理是企业开发中常用的技术,理解 Spring 事务管理的代码对于理解 Spring 事务管理有很大帮助。本章涉及的 Spring 事务隔离级别、Spring 事务传播行为以及 Spring 事务代码分析都是常见的面试题,希望读者务必掌握。
第 14 章 Spring 集成 Redis;Redis 是一个开源的使用 ANSIC 语言编写、支持网络、可基于内存也可以持久化的 Key-Value 数据库。
Redis 在企业开发中通常充当高速缓存的作用,用于保护接口或者数据库。在高并发场景、分布式场景下也可以充当分布式锁,避免多个 JVM 进程在同一时间对同一资源进行修改,从而造成数据不一致。
因为 Redis 是开发中最常用的缓存技术,本章将重点分析 Redis 常见操作命令和 Redis 常见架构以及 Spring 与 Redis 的集成开发。
第 15 章 Spring 集成 ZooKeeper;ZooKeeper 是开放代码的分布式协调服务框架,是一个为分布式应用提供一致性服务的组件。在分布式环境中协调和管理服务是一个非常复杂的过程,ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
本章讲解了 ZooKeeper 集群的部署以及 Spring 与 ZooKeeper 的集成开发。ZooKeeper 在企业开发中是常用的分布式协调服务。熟练使用 ZooKeeper 对分布式环境中系统解耦和系统高可用性有很大帮助。
第 16 章 Spring 集成 Kafka ;Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,由 Scala 和 Java 编写。Kafka 是一种高吞吐量的分布式发布订阅消息系统。Kafka 具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在企业架构设计中起到解耦、削峰、异步处理的作用。
Kafka 在企业开发中扮演着非常重要的角色,常见的使用场景如下。(1)日志收集。企业开发中可以使用 Kafka 收集各种服务的日志,通过 Kafka 以统一接口服务的方式开放给各种消费者使用,如 Hadoop、Hbase 和 Solr 等。
(2)消息系统。将生产者和消费者解耦,常用于支付或订单场景系统解耦。
(3)用户行为跟踪。Kafka 可用于记录 Web 用户或者 App 用户的各种行为,如网页浏览、商品检索和“点击”等活动。这些活动信息被各个服务器发布到 Kafka 对应的 Topic 中,然后订阅者通过订阅这些 Topic 来做实时的监控分析,或者装载到 Hadoop 或数据仓库中做离线分析和挖掘。
(4)Kafka 也经常用来记录运维监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
(5)流式处理。比如 Spark Streaming 和 Storm 等。
第 17 章 Spring 集成 Mycat;Mycat 隐藏了分库分表的细节,从开发人员的角度看,在无须知道具体哪个库的哪张分表进行操作的情况下,应用程序即可对数据库进行操作。对于一些老项目,引入 Mycat 进行分库分表,无须修改业务代码,只需要修改 JDBC 连接即可实现项目的升级。
第 18 章 Spring 集成 Sharding-JDBC;Sharding-JDBC 是开源的数据库中间件。Sharding-JDBC 定位为轻量级数据库驱动,由客户端直连数据库,以 jar 包形式提供服务,没有使用中间层,无须额外部署,无须其他依赖.Sharding-JDBC 可以实现旧代码迁移零成本的目标。Sharding-JDBC 与.MyCat 不同,MyCat 本质上是一种数据库代理。
Sharding-JDBC 与 Mycat 类似,都是分库分表中间件。Mycat 以代理的形式提供数据库服务,对应用程序完全透明。Sharding-JDBC 采用在 JDBC 协议层扩展分库分表,是一个以 jar 包形式提供服务的轻量级组件。读者可以根据具体场景选择使用合适的分库分表组件。
第 19 章 Spring 集成 Dubbo;Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,Dubboo 使应用可通过高性能的 RPC 实现服务的输出和输入功能,并且可以与 Spring 框架无缝集成。
Dubbo 是互联网公司微服务开发的利器,熟练掌握 Dubbo 对企业微服务架构演进和升级有重要的意义。
附录 A 设计模式,设计模式(Design pattern)是软件工程领域的最佳实践,本文讲解的 Spring 代码解析部分涉及大量的设计模式,设计模式也是面试中经常被问到的。设计模式不是高超的技术,而是众多软件开发人员经过长时间的试验和改正错误中总结出来的。
A.1 工厂模式
工厂模式(Factory Pattern)是 Spring 中最常用的设计模式之一。工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,隐藏了创建对象的逻辑,并通过使用一个共同的接口来供调用方使用。
A.2 抽象工厂模式
抽象工厂围绕一个超级工厂创建其他工厂。在抽象工厂模式中,接口负责创建一个相关对象的工厂,不需要显示指定它们的类型。每个从抽象工厂中生成的工厂都能按照工厂模式提供对象。
A.3 单例模式
单例模式涉及一个单一的类,该类负责创建自己的对象,同时确保这个类只有单个对象被创建。Spring 管理的 Bean 默认都是单例的。
A.4 建造者模式
建造者模式将多个简单对象构建成一个复杂的对象。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
假设以下场景,每台电脑都由 CPU 和显示器组成。现在 CPU 常见的厂商有 Intel 和 AMD,显示器常见的厂商有 DELL 和 PHILIPS。每台电脑由一个 CPU 和显示器组成。
A.5 原型模式
原型模式用于创建重复的对象,这种模式实现了一个原型接口,该接口用于创建当前对象的克隆对象。当创建对象的代价较大时,比较适合使用这种设计模式。如创建一个对象需要高代价的数据库操作和远程调用,这时可以将该对象缓存。当下一个请求到来时返回该对象的克隆对象,在需要的时候缓存该对象,以此来减少数据库调用和远程调用。
A.6 适配器模式
适配器模式作为不兼容接口之前的桥梁。适配器模式涉及到一个类,该类负责加入独立的或者不兼容的接口功能。
下面通过案例演示适配器模式的使用。其中音频播放器只能播放 MP3 格式的文件,视频播放器可以播放 MP4 格式的文件和 RMVB 格式的文件。现在想要通过适配器模式使音频播放器不仅可以播放 MP3 格式的文件,还可以播放其他格式的文件。
A.7 桥接模式
如果软件系统中某个类存在两个独立变化的维度,通过桥接模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,桥接模式将两个独立变化的维度设计为两个独立的继承结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,因此称作桥接模式。
A.8 标准模式
标准模式允许开发人员使用不同的标准来过滤一组对象,可以通过标准模式结合多个标准来获得单一标准。
A.9 组合模式
组合模式是把一组相关的对象当作一个单一的对象对待的模式。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
A.10 装饰器模式
装饰器模式向现有的对象添加新的功能,并且不破坏对象的结构。用装饰器模式创建一个装饰类,用于包装原有的类。
A.11 外观模式
外观模式隐藏了系统的复杂性,并为子系统中的一组接口提供了一个统一的高层访问接口,这个接口使得子系统更容易被访问或者使用。外观模式的优点是用户使用方便,把过度拆分的分散功能,组合成一个整体,对外提供一个统一的接口,隐藏了底层实现。
以医院看病为例,把医院作为一个系统,按照部门职能,该系统可以划分为挂号、门诊、化验、缴费、取药等部门。病人要与这些部门打交道,就如同一个系统的客户端与一个系统的各个不同的类打交道,客户端是需要处理很多逻辑,以确定何时应该调用某个类。
A.12 享元模式
享元模式主要通过减少创建对象的数量,从而达到提高性能的目的。享元模式尝试重用现有的同类对象,如果现有的对象未匹配,则创建新对象。
A.13 代理模式
代理模式使用一个类代表另一个类的功能,通过代理可以控制对这个对象的访问。
A.14 责任链模式
责任链模式为请求创建了一系列处理对象,这些处理对象的形成链条。责任模式将请求的发送者和处理对象进行解耦。在这种模式中,如果一个处理对象不能处理该请求,那么该处理对象将会把相同的请求传给下一个接收者,以此类推。责任链的使用场景有 Struts 中的拦截器和 Servlet 中的过滤器等。
A.15 命令模式
命令模式是一种数据驱动的设计模式。命令模式请求将以命令的形式封装在对象中,并传递给调用对象,调用对象将寻找可以处理该命令的合适的对象,并把该命令传给相应的处理对象进行处理。
A.16 解释器模式
解释器模式提供了解析语法或表达式的功能。解释器模式被用在 SQL 解析、符号处理引擎等。
A.17 迭代器模式
迭代器模式是 JDK 中常用的设计模式。使用这种模式会顺序访问集合对象的元素,不需要知道集合对象的底层存储情况。
A.18 中介者模式
中介者模式通常用来降低多个对象间沟通的复杂度。中介者模式提供了一个中介类,这个类处理不同对象之间的沟通,是多个对象之间保持松耦合,使代码易于维护。
A.19 备忘录模式
备忘录模式用于保存一个对象的状态,以便在适当的时候恢复对象。备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
A.20 观察者模式
当对象间存在一对多关系时,则使用观察者模式。观察者模式的主要作用是当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
A.21 状态模式
在状态模式中,类的行为是基于状态改变的,可以创建表示各种状态的对象和一个行为随着状态对象改变而改变的 Context 对象。
A.22 空对象模式
在空对象模式中,使用一个空对象取代 null。空对象可以加强系统的稳固性,能有效地防止空指针报错对整个系统的影响,使系统更加稳定。
A.23 策略模式
策略模式定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相互替代,将算法和使用算法的客户端分割开来,相互独立。
A.24 模板模式
模板模式定义一个算法的骨架,可将一些具体的步骤延迟到子类中。模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
A.25 拦截过滤器模式
拦截过滤器模式用于对请求或响应做一系列处理。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。
附赠 23 种设计模式视频教程:
附赠 spring 源码视频+面试题+文档:
总结
本文由 13 位专家力荐!
全文理论与工程实践相结合,全面阐述 Spring5 的新特性;从 Spring 实战到源码分析,再到原理剖析,以及 Spring 与各种主流中间件及框架结合的落地实践,可以让读者深入理解 Spring 的实现原理和底层架构,使用 Spring 的强大功能至上而下地构建复杂的 Spring 应用程序。
需要这份 543 页【Spring5 企业级开发实战】文档、【spring 源码视频+面试题+文档】、【23 种设计模式教程视频】的小伙伴,可以转发此文关注小编,**点击这里,获得文档领取方式**
评论