Spring IOC的深入理解(一)

2019-04-13  本文已影响0人  chengcongyue

引言

在面试中,最常问起的Spring就是两个方面Spring IOC和Spring Aop,从本篇文章开始,我们深入的理解Spring IOC,从IOC的思想到它的源码实现.

Spring IOC的原理

为什么要引入IOC?(IOC的背景)

在采用面向对象的方法设计的软件中,它的底层是由N个对象实现的,所有的对象通过彼此的合作,最终实现了系统的业务逻辑.
我们看一下这个图:


图片.png

多个对象的关系就好像是上图齿轮之间的关系,它们配合,协同工作,但是存在问题的隐患,如果一个齿轮出现了问题,那么其他的齿轮也都会受到影响.齿轮之间的关系和对象之间的耦合关系十分相似.尽管会造成安全的隐患,但是对象之间的耦合是必要的,因为这是协同工作的基础,随着应用的不断扩大,对象之间的依赖关系也越来越复杂,经常会出现多重的依赖关系.耦合度过高的系统,肯定会有牵一发而动全身的安全隐患.


图片.png
所以为了解决对象之间耦合度过高的问题,便有了IOC的思想,以实现对象之间的解耦

什么是IOC?

IOC的出现是为了对象之间的解耦,那么什么是IOC呢?Inversion Of Control翻译过来就是控制反转,也叫控制倒置.简单了来说,就是借助第三方的对象,然后把这个对象透明化,以此来解耦.第三方的对象就是一个容器,如下图:

图片.png
这个时候四个对象就没有了耦合关系,齿轮之间的传动就全部依靠第三方的,这样对象的控制权全部上缴给了IOC容器,IOC容器这个时候也相当于是一个粘合剂,没了它,对象之间就失去了联系.我们在上面说的透明化,在下面的图中实现以下,如图:
图片.png
这样ABCD就没有了耦合的关系,彼此毫无联系,当你要实现一个对象的时候,就不用在考虑其他的对象了.
那么我们为什么要起控制反转这个名字呢?
图片.png
如图,当没有用到IOC的时候,当我们运行的A用到了B时候,需要由A自己来创建,注意这个时候创建对象的主动权在自己的手中,需要自己去创建对象B,获取自己使用已经创建好的对象B.
但是当有第三方容器的参与,A和B失去了联系,这个时候必须有第三方的IOC容器创建B,然后把B注入到A中去.
对比前后,我们发现A对象获取B对象的行为,由对象A自己主动的创建到IOC创建然后赛给A,即由主动变成了被动,所以说IOC到底是什么发生了翻转,是控制权,谁创的对象,发生的变化.

注入(DI)

注意我们将上面文字B注入到A中的注入加深了,接下来我们就来说一下注入的定义.我们说什么发生了翻转?是控制权,说的更具体一点,就是获取对象的方式发生了变化,IOC通过注入的方式使获取对象.所以说
控制反转依赖注入是只从不同的方面来描述同一件事情.
通过IOC容器,利用依赖注入的方式,实现对象之间的解耦
我们举一个例子,USB接口和USB设备的例子,我们要用USB设备通过USB接口向电脑中读数据.
当电脑从USB设备读取的时候,我们不关系设备是什么样子的,不管他是U盘还是移动硬盘,还是什么,它没必要管,到底是插U盘还是移动硬盘,都是我的自由,控制权在我,电脑是没有办法决定自己是用U盘还是使用移动硬盘的,此时的我那起到的就是IOC容器的作用.
然后我们再回到对象之间的依赖注入之中,你需要什么,IOC工厂就给你提供什么,你直接使用即可,没有必要管,它是怎么来的.

IOC的使用好处

上一篇下一篇

猜你喜欢

热点阅读