你好,Spring!

拿人钱财替人干活儿,在不影响工作的前提下,想做到很高频率的更新很难,但是我也尽力输出,不能为了写而写,宁缺毋滥吧。

我的想法是这样的,接下来的一段时间专门写Spring框架。整体思路就是:入门知识 --> 实际应用 --> 构建简易Spring框架 --> 看一下核心模块源码,争取早日写完这个Spring系列。用最通俗的语言来把“春天”给写好。

Spring简介

猜测项目创始人Rod Johnson希望这个框架像春天一样充满生机与活力,事实也正如这位音乐专业的计算机大佬所愿,截止目前Spring Framework已经更新到版本并在GitHub上已经斩获40K+的star了。

Spring Framework是一个分层的全栈轻量级框架,目前凡事采用Java语言开发,几乎都会和它有染。框架内有两个核心思想:IOC(Inversion Of Control)和AOP(Aspect Oriented Programming),凭借着这两个思想帮助我们封装了很多组件,简化了开发流程,同时它的可扩展性也非常强,因此可以很方便的集成市面上很多优秀的框架,就像王健林的万达,只要商场建的好,就能吸引很多优秀的商家和买家。

Spring架构总览

引用一张官图展示Spring的架构:

file

自上而下可以分为四层:

第一层分为两个模块:

数据访问层,具体组成图中有展示,主要是封装了JDBC操作过程中的很多模板化代码。由于对ORM映射的支持,集成了MyBatis以及Hibernate等很哇塞的持久层框架

web层,支持Servlet协议以及WebSocket等通讯协议,使得能够同其它应用实现远程通讯及相互调用。同时支持使用SpringMVC对该层进行扩展。

主要是对AOP的一些支持,是我们使用切面编程的支撑,AOP的存在帮助我们提取代码中的一些非业务功能的公共逻辑。

Core Container,Spring的核心部分,所有Bean的创建,配置以及生命周期管理都在这个模块中,属于阎王爷的生死簿级别。控制反转思想的实现也正是基于这个核心模块实现的,而且是面试必问的,必问!必问!

Test层,这里提供单元测试,Mock测试等功能,目的是方便使用Spring框架的开发人员能够更轻松的写单元测试。

核心思想概述 IOC

英文名:Inversion Of Control

中文名:控制反转

主要技能:对象间解耦合,不用关心对象的创建,配置以及生命周期的管理,一切都交给框架管理。这里就反映了Spring的设计思想,灵活运用了工厂模式,单例模式以及原型模式等等

下面分别用两张图对比展示IOC思想带来的好处:

file

file

第一张图展示了在非IOC容器中传统的通过new关键字创建对象并实现对象间关联,这种方式在比较大的项目中,一个类A可能要被几十上百个类引用,如果这个类A中的业务发生变化,那么后果就是牵一发动全身,代码的可维护性和扩展性大大降低。

第二张图在IOC容器的支持下,Java对象的管理方式得到了本质上的改变,所有对象都交给IOC容器统一管理,统一分配,统一管理(这么说太绝对了,因为当Bean的Scope属性为prototype时,对象创建后就不由IOC容器控制了,可以暂且这么理解,后边会详细说明),某个类依赖的对象直接由IOC容器包分配。

IOC容器的创建,还引入了另外一个概念,叫DI--Dependancy Injection即常说的依赖注入。也是一个概念性的东西,用来描述IOC容器中Bean对象之间关系的。打个比方,一大堆单身男女(各种Class的Bean对象)想在今天这个平安夜脱单,并且带着自己的择偶标准(依赖的其他对象),于是找到了某交友APP就叫IOC,那么IOC有了这些人(Bean)的信息以后,就可以按需(依赖)分配了。这个分配过程就是依赖注入--DI。那如果张三指明说喜欢李四,李四喜欢王五,而王五却喜欢张三,这就是循环依赖。Spring的解决办法是利用三级缓存,细节部分会在后面的文章中阐述。

AOP

英文名:Aspect Oriented Programming

中文名:面向方便面编程

主要技能:可以将模板化的,通过OOP无法解决的逻辑代码提取出来,比如说统计一个方法执行耗时,需要在方法入口和出口分别打印并计算耗时,或者是创建事务,进入方法时创建事务,方法结束时提交或者回滚事务(这个Spring基于AOP已经实现了声明式事务),再或者是访问权限控制等等。这类代码是无法通过提取父类来完成的。我个人理解,AOP弥补了Java原生OOP的不足之处。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwgxxf.html