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


框架的本质分析——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的实现方式 。
【框架的本质分析——Spring框架】IOC主要的实现方式有两种:依赖查找,依赖注入 。
AOP的底层原理是什么?AOP本质是拦截,拦截的本质是代理 。
 
框架的本质分析——Spring框架

文章插图
 
 
框架的本质分析——Spring框架

文章插图
 
 
框架的本质分析——Spring框架


推荐阅读