您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

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

时间:2021-05-31 10:06:04  来源:环球网  作者:架构宅话
框架的本质分析——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,接下来我们也会一点点剖析其本质。



Tags:Spring框架   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最近呀,有小伙伴提出 自己在学习 Spring 的时候,这个源码环境有些搞不定。 那这怎么能行,不能因为这点小困难就让小伙伴放弃呀。这里咱就不在赘述读Spring源码的好处了吧,想干这...【详细内容】
2021-09-14  Tags: Spring框架  点击:(56)  评论:(0)  加入收藏
第一章:认识SpringSpring认识框架spring全家桶: spring ,springmvc,spring boot,spring cloudspring:出现在2002左右,解决企业开发的难度,减轻对项目模块之间的管理。类和类之间的...【详细内容】
2021-06-24  Tags: Spring框架  点击:(123)  评论:(0)  加入收藏
诞生的背景什么背景下诞生了该技术?不论是哪个框架,不会平白无故诞生,不会平白无故地被人所追捧,了解其背景,追根溯源。让我们把时间拨回到2002年,当时JavaEE和EJB正大行其道。Sp...【详细内容】
2021-05-31  Tags: Spring框架  点击:(180)  评论:(0)  加入收藏
译者:littlebrain4solving来源: https://blog.csdn.net/littlebrain4solving/概要说明在此篇文章中,我们根据使用@Async注解进行探索Spring对异步执行的支持。简单的把@Async注...【详细内容】
2021-03-05  Tags: Spring框架  点击:(378)  评论:(0)  加入收藏
在我们的开发中,会不可避免的遇到Bean之间循环依赖的,所谓循环依赖,就是两个或者两个以上的Bean互相持有对方,这样在程序运行调用中,会出现这种循环依赖的现象,假设是两个Bean,当程...【详细内容】
2020-12-14  Tags: Spring框架  点击:(87)  评论:(0)  加入收藏
前言学习过Spring框架的人一定都会听过Spring的IOC(控制反转) 这个概念,对于初学Spring的人来说,总觉得IOC是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spr...【详细内容】
2020-12-03  Tags: Spring框架  点击:(116)  评论:(0)  加入收藏
1、IOC和DIIOC: 控制反转 即控制权的转移,将我们创建对象的方式反转了,以前对象的创建时由我们开发人员自己维护,包括依赖关系也是自己注入。使用了spring之后,对象的创建以...【详细内容】
2020-11-03  Tags: Spring框架  点击:(58)  评论:(0)  加入收藏
今天学习内容安排如下: 切面配置的核心三步骤。 传统sprin配置和AspectJ配置都学下,xml和注解都使用下。 同时为了测试,补充说明一下spring的junit集成,几天前没来得及学的知识...【详细内容】
2020-08-19  Tags: Spring框架  点击:(64)  评论:(0)  加入收藏
今天是刘小爱自学Java的第123天。感谢你的观看,谢谢你。 学过很多面向XX编程,比如:面向过程编程,面向对象编程,面向接口编程,现在又是面向切面编程。但是不管如何,说来说去最终都是...【详细内容】
2020-08-15  Tags: Spring框架  点击:(97)  评论:(0)  加入收藏
Spring介绍Spring 是一个开源框架,是一个分层的 JavaEE 一站式框架。所谓一站式框架是指 Spring 有 JavaEE 开发的每一层解决方案。 WEB层:SpringMVC Service层:Spring的Bean管...【详细内容】
2020-03-03  Tags: Spring框架  点击:(68)  评论:(0)  加入收藏
▌简易百科推荐
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Python阿杰    Tags:FastAPI   点击:(6)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  java老人头    Tags:框架   点击:(11)  评论:(0)  加入收藏
今天来梳理下 Spring 的整体脉络啦,为后面的文章做个铺垫~后面几篇文章应该会讲讲这些内容啦 Spring AOP 插件 (了好久都忘了 ) 分享下 4ye 在项目中利用 AOP + MybatisPlus 对...【详细内容】
2021-12-07  Java4ye    Tags:Spring   点击:(14)  评论:(0)  加入收藏
&emsp;前面通过入门案例介绍,我们发现在SpringSecurity中如果我们没有使用自定义的登录界面,那么SpringSecurity会给我们提供一个系统登录界面。但真实项目中我们一般都会使用...【详细内容】
2021-12-06  波哥带你学Java    Tags:SpringSecurity   点击:(18)  评论:(0)  加入收藏
React 简介 React 基本使用<div id="test"></div><script type="text/javascript" src="../js/react.development.js"></script><script type="text/javascript" src="../js...【详细内容】
2021-11-30  清闲的帆船先生    Tags:框架   点击:(19)  评论:(0)  加入收藏
流水线(Pipeline)是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术。本文主要介绍了诞生于云原生时代的流水线框架 Argo。 什么是流水线?在计算机...【详细内容】
2021-11-30  叼着猫的鱼    Tags:框架   点击:(21)  评论:(0)  加入收藏
TKinterThinter 是标准的python包,你可以在linx,macos,windows上使用它,你不需要安装它,因为它是python自带的扩展包。 它采用TCL的控制接口,你可以非常方便地写出图形界面,如...【详细内容】
2021-11-30    梦回故里归来  Tags:框架   点击:(26)  评论:(0)  加入收藏
前言项目中的配置文件会有密码的存在,例如数据库的密码、邮箱的密码、FTP的密码等。配置的密码以明文的方式暴露,并不是一种安全的方式,特别是大型项目的生产环境中,因为配置文...【详细内容】
2021-11-17  充满元气的java爱好者  博客园  Tags:SpringBoot   点击:(25)  评论:(0)  加入收藏
一、搭建环境1、创建数据库表和表结构create table account(id INT identity(1,1) primary key,name varchar(20),[money] DECIMAL2、创建maven的工程SSM,在pom.xml文件引入...【详细内容】
2021-11-11  AT小白在线中  搜狐号  Tags:开发框架   点击:(29)  评论:(0)  加入收藏
SpringBoot开发的物联网通信平台系统项目功能模块 功能 说明 MQTT 1.SSL支持 2.集群化部署时暂不支持retain&will类型消 UDP ...【详细内容】
2021-11-05  小程序建站    Tags:SpringBoot   点击:(55)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条