<返回更多

框架的本质分析——Spring框架

2021-05-31  环球网  架构宅话
加入收藏
框架的本质分析——Spring框架

 

诞生的背景

什么背景下诞生了该技术?

不论是哪个框架,不会平白无故诞生,不会平白无故地被人所追捧,了解其背景,追根溯源。

让我们把时间拨回到2002年,当时JAVAEE和EJB正大行其道。Spring的作者觉得其太重了,并不是所有人都需要EJB的功能,因此搞出了一套框架interface21,即Spring的前身。

思考1:Spring和EJB到底孰轻孰重?

回顾历史,我们来看现在的Spring,实际上其生态已经非常完善,也已经变得非常重,但是我们可以选择性地使用其特性,而且使用过程中我们对其感知稍弱。

那么EJB呢,为什么Rod Johnson会觉得EJB重呢?我们需要完全地投入到EJB中去,EJB的一些设计理念过于复杂,侵入性强,开发者需要严重依赖(Spring现在难道不是吗)。

思考2:到底什么是轻量级

这里有一个公式:轻量系数=解决的问题/侵入程度。简单来说就是解决问题的时候,侵入程度越低,就越轻量。

注:EJB当时是Java霸主,官方的标准,可以说Spring诞生于EJB统治的黑暗年代。

它解决了什么痛点、什么问题?

技术没有银弹,只有实事求是,解决问题。

当时的开发严重依赖EJB,但是对于大多数程序员来说,很难理解和掌握,严重影响开发效率。Spring就在这时候带着其愿景:高效、简洁、轻量走入了人的视野。

解决的什么痛点:Java应用开发严重依赖J2EE的标准规范框架EJB,EJB非常的臃肿,抽象复杂,很难被大众掌握,影响开发效率。

它有什么优缺点?

没有完美的技术、完美的框架、完美的实现。

优点:起初Spring非常轻量,仅包括IOC和DI、以及AOP,控制反转和依赖注入、AOP切面编程让你用的爱不释手。

缺点:框架的生态总要发展的,生态越来越多,配置越来越臃肿,它已经不再让我们感觉到轻量,因为配置太多了。

缺点就是问题,问题就要解决。那么怎么解决的呢,后面我们会分析Spring Boot,到时候就知道了。

有什么核心功能特性、亮点

这个技术有哪些核心的功能,亮点是什么?能给我们带来什么价值、收益?

Spring最初的核心:IOC和AOP,让我们可以更轻量的编码(还记得前面提的什么是轻量吗)。

通过IOC和DI我们不再需要大量的new对象set对象进行注入,一切交给Spring,我们只需要简单的在代码之外的配置(spring.xml)里配置一下bean就行了。一切是多么的美好,因为它轻量。

通过AOP我们实现切面编程,我们可以抽取切面,对公共的能力进行提取,日志、权限、监控,一切更加美好了。

Spring 后来引入了事务管理、MVC,我们的开发更加简单了。我们摒弃了原来用的Struts、丢掉了原生的JDBC,开发效率大大提高。

核心功能实现原理、追其本质

芒格曾经说过,我们要学习重要学科的重要原理,像我们学习技术一样,我们要学习主要框架的核心实现原理,了解其本质,了解其解决的痛点,追其本质。

IOC本质是什么?

IOC全称:Inversion of Control,即控制反转,是一种设计思想。简单来说就是把创建对象的任务交给框架,而不是我们自己编码。

 

框架的本质分析——Spring框架

 

 

我们一直在说IOC容器,那么容器的本质是什么?

首先我们肯定想到容器嘛,肯定是一种数据结构、比如集合。那么Spring中到底是用什么实现的呢?

如果看过源码的小伙伴,肯定知道,其底层是一个Map,当然还是ConcurrentHashMap。

private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

 

框架的本质分析——Spring框架

 

DI依赖注入本质是什么?

有时候我们会说DI是IOC的实现方式。

IOC主要的实现方式有两种:依赖查找,依赖注入。

AOP的底层原理是什么?

AOP本质是拦截,拦截的本质是代理。

 

框架的本质分析——Spring框架

 

 

框架的本质分析——Spring框架

 

 

框架的本质分析——Spring框架

 

Spring MVC为何诞生?

记得在Spring MVC组件没出来之前,我们会用什么框架?SSI、SSH(Spring Struts Hibernate)、SSM(当然现在也是SSM)。那么Spring MVC诞生的背景是什么?Struts真的就那么差吗?这里有必要说一下Java web框架的发展史:JSP/Servlet、Struts1.x、Struts2.x、Spring MVC。

Java Web的发展史

Model 1模型

 

框架的本质分析——Spring框架

 

model 2模型,步入MVC时代

框架的本质分析——Spring框架

 

MVC框架诞生

Struts1.x

框架的本质分析——Spring框架

 

Struts2.x

框架的本质分析——Spring框架

 

思考:为什么Struts2会被淘汰?

答案是:1. 漏洞太多,修不过来;2.Spring 太火了能用Spring 搞定的事情你会用其他框架吗,这种很少,我们可以看到招聘要求,很多时候都会要求Spring Mybatis这些框架能力,而很少提起Struts2了

Spring MVC

框架的本质分析——Spring框架

 

Spring MVC实现原理是什么?本质是什么?

在JSP、Servlet编码泛滥的那个年代,我们会写很多的Servlet,Filter,需要调整各种顺序,在web.xml里配置各种配置。我们都知道编写Java Web都离不开其核心Servlet,那么Spring MVC是如何搞的,它能脱离规范吗?答案是:不能。

Spring MVC离不开Servlet,其本质就是Servlet,然后在Servlet执行的流程上添加了很多特性。

其核心就是DispatcherServlet

框架的本质分析——Spring框架

 

Spring MVC工作流程,可以发现其核心就是DispatcherServlet,其他的都是流程中的扩展,让整个处理流程可以更容易扩展,解耦性更强。

框架的本质分析——Spring框架

 

为何如此发展

分析发展路线图、分析核心版本,追根溯源。

Spring发展史

框架的本质分析——Spring框架

 

Spring的核心版图

可以看到其版图已经从原来的IOC容器和AOP后来扩张到了Web领域、Dao领域、ORM领域以及一些常用的JEE组件领域。

框架的本质分析——Spring框架

 

最后,当然Spring已经延伸出了Spring Boot、Spring Cloud以及现阶段的Spring Cloud Data Flow,接下来我们也会一点点剖析其本质。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>