80W美团架构师整理分享出了Spring5企业级开发实战文档

news2024/11/15 21:22:46

前言

都说程序员工资高、待遇好, 2022 金九银十到了,你的小目标是 30K、40K,还是 16薪的 20K?作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer 并不算难。然而,提升 Java 核心能力最快、最有效,短期内升职加薪的方法,到底是什么?

首先,你需要跳出日常工作,接触更有深度、更前沿的顶级项目。一个简单的逻辑:大厂之所以能够给到高于行业水准的薪资,正是因为即使是普通开发人员,也要应对很多复杂的场景。这些复杂场景和项目,就像“墙外的世界”,没有看过,没有接触过,你就无法进行体系化的学习和建立认知,技术壁垒自然就出现了。

所以,如果你期望通过个人努力,实现收入增长和职位晋升,那最好的方式,一定是多学多看多做。

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应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

U盘插入提示格式化才能使用,但里面有数据无法复制出来怎么解决?

U盘作为移动储存硬盘,避免不了出现各种问题,特别是莫名提示格式化,无法打开,要使用的话只能先将其格式化。 只要电脑还能正常识别出U盘,那都是有概率恢复出来数据的。先不要点“格式化”! 如果一旦出现点…

4.JVM垃圾收集机制

1. 垃圾收集算法 1.1 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法,这种算法,没有什么新的思想,只是根据对象存活周期的不同将内存分成几块。一般将JAVA堆分为新生代、老年代,这样我们就可以根据各个年代的特点选择合适…

【注意力机制】Self-attention注意力机制理论知识

注意力机制目录输入输出类别(N指向量个数):Self-attention引入self-attention架构self-attention怎么产生bbb例子:产生b1b^{1}b1例子:产生b2b^{2}b2self-attention 总结:Multi-head Self-attentionPosition…

使用 Learner Lab - 使用 API Gateway 与 Lambda 上传图片到 S3

使用 Learner Lab - 使用 API Gateway 与 Lambda 上传图片到 S3 AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务,让学生可以在 100 USD的金额下,自行练习所要使用的 AWS 服务,如何进入 Learner Lab 请参考 使用 Lear…

【车载开发系列】UDS诊断---读取数据($0x22)

【车载开发系列】UDS诊断—读取数据($0x22) UDS诊断---读取数据($0x22)【车载开发系列】UDS诊断---读取数据($0x22)一.概念定义二.报文格式1)请求2)肯定响应3)否定响应三…

Vue中$nextTick实现源码解析

这篇文章主要为大家介绍了Vue中$nextTick实现源码解析,有需要的朋友可以借鉴参考下! 先看一个简单的问题 {{ text }} 此时打印的结果是什么呢?是 old。如果想让它打印 new,使用 nextTick 稍加改造就可以 this.$nextTick(() >…

【计组笔记】06_指令系统

5.1 指令系统概述及指令格式 1. 指令的基本概念 2. 指令的分类 根据计算机层次结构分类 根据指令中地址码字段的个数分类 根据指令中操作数的物理位置分类 根据指令的功能分类 3. 指令格式 4. 指令的再认识 5. 指令格式举例 5.2 寻址方式及指令寻址 1. 寻址方式的概念 2.…

[论文阅读] 颜色迁移-Correlated Color Space

[论文阅读] 颜色迁移-Correlated Color Space 文章: Color transfer in correlated color space, [paper], [matlab code], [opencv code] 1-算法原理 本文算法比较简单, 其原理是把原始图像本身的空间分布进行归一化, 然后通过旋转平移缩放等变换, 变换到目标图像的空间分布…

WMS手动配货和自动配货的区别

手动配货 不知道配货流程的朋友可以看一下前面的文章链接: 深入浅出WMS之出库流程里面有对出库的解释说明,其中也有对配货的解释。前端页面也可以在前面的那篇文章中看到,这里我们来说一下后端部分。 查 手动配货是选中出库单的某条数据,然…

一文教你从Linux内核角度探秘JDK NIO文件读写本质(上)

1. 前言 在深入讲解Netty那些事儿之从内核角度看IO模型一文中曾对 Socket 文件在内核中的相关数据结构为大家做了详尽的阐述。 Socket内核结构.png 又在此基础之上介绍了针对 socket 文件的相关操作及其对应在内核中的处理流程: 系统IO调用结构.png 并与 epoll 的…

由阿里三位专家撰写:数据库高效优化:架构、规范SQL技巧文档

引言 学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生…

[附源码]计算机毕业设计springboot作业管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

词袋模型(Bag-of-words model)

词袋模型词袋模型简介示例计算机视觉中的词袋模型词袋模型 简介 词袋模型(Bag-of-words model)是用于自然语言处理和信息检索中的一种简单的文档表示方法。通过这一模型,一篇文档可以通过统计所有单词的数目来表示,这种方法不考…

redis安装

版本号:redis-6.2.1 下载redis-6.2.1.tar.gz放/opt目录 解压命令:tar -zxvf redis-6.2.1.tar.gz 解压完成后进入目录:cd redis-6.2.1 在redis-6.2.1目录下执行make命令 出现make test 执行make install 查看redis默认安装路径:/u…

二、CANdelaStudio入门-版本介绍

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的各个版本,欢迎各位朋友订阅、评论,可以…

PbootCMS简单两步增加自动清理日志功能

问:网站没人访问触发不了清理怎么办? 答:我建议你不要关心这个,都没人访问你的网站,你还有个锤子东西需要清理? 问:听人说前台插入script触发会不安全? 答:都是成年人…

Web应用程序,简单的日志系统解决方案

一、简介 今天介绍一下,当你的程序没有日志系统时,如何快速方便查看当前程序日志的解决方案。如果你的程序有日志系统,可以不看本篇博客哈。本文实例是使用 C# 讲解,当然实现的核心思想适用于其他语言开发的系统。 二、解决方案…

nexus搭建测试dockermavennpm仓库

JAVA下载 https://www.oracle.com/java/technologies/downloads/archive/ https://login.oracle.com/mysso/signon.jsp QQq951699. [rootvm1 ~]# mkdir -p /data [rootvm1 ~]# mv jdk-8u221-linux-i586.tar.gz /data [rootvm1 ~]# cd /data;tar xf jdk-8u221-linux-i586.tar.g…

222页8万字智慧园区IOC平台运维管理平台解决方案

目 录 第一章 项目概述 7 1.1 园区格局的变化 7 1.1.1 传统安防面临的不足与挑战 7 1.1.2 园区安防未来的发展趋势 7 1.2 需求分析 8 1.2.1 平台集成化 8 1.2.2 数据可视化 8 1.2.3 管控全面化 8 1.2.4 覆盖高清化 9 1.2.5 指挥简易化 9 1.2.6 建设智能化 9 1.3 建设思路 9 1.3…

基于物联网设计的自反馈深紫外杀菌消毒系统(STM32F407)

一、前言 目前常态化防控病毒有很多种,其中主要是人工喷洒消毒液这种消毒方式,这种消毒效果无法得到量化,同时还可能存在喷洒盲区,也会对公民的呼吸道产生刺激,腐蚀损坏公共设施,而对于室内公共空间的消毒的要求会更高,基于这样的状况,人工喷洒消毒液这种方式肯定不太…