Spring从入门到精通(一)----IoC(控制反转)
来源:互联网 发布:冒险岛数据库2015 编辑:程序博客网 时间:2024/06/05 17:13
- 理论背景
- 什么是控制反转IoC
理论背景
在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过相互合作,最终实现系统的业务逻辑。
如果我们打开机械手表的后盖,就会看到与上面类似的情景,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。上图描述的的就是这样的一个齿轮组,他拥有多个独立的齿轮,这些齿轮互相啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。
齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。
现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。
耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。为了解决对象之间的耦合度过高的问题,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的“解耦”
什么是控制反转(IoC)
Inversion of Control,英文缩写为IoC,不是什么技术,而是一种设计思想。
简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦,如下图:
大家看到了吧,由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。
我们再来做个试验:把上图中间的IOC容器拿掉,然后再来看看这套系统:
我们现在看到的画面,就是我们要实现整个系统所需要完成的全部内容。这时候,A、B、C、D这4个对象之间已经没有了耦合关系,彼此毫无联系,这样的话,当你在实现A的时候,根本无须再去考虑B、C和D了,对象之间的依赖关系已经降低到了最低程度。所以,如果真能实现IOC容器,对于系统开发而言,这将是一件多么美好的事情,参与开发的每一成员只要实现自己的类就可以了,跟别人没有任何关系!
然后我们再看一下为什么IoC叫控制反转?
1、没有引入IOC之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,A直接使用new关键字创建B的实例,程序高度耦合,效率低下,无论是创建还是使用B对象,控制权都在自己手上。
2、软件系统在引入IOC容器之后,这种情形就完全改变了,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
通过对比发现,A在获取对象B的过程中,有主动变为被动,控制权颠倒了过来,这就是控制反转这个名称的由来。
代码中的具体实现在下一篇博客中实现,敬请期待!
- Spring从入门到精通(一)----IoC(控制反转)
- Spring从入门到精通(一)----IoC(控制反转)
- Spring学习IoC控制反转(一)
- Spring IoC(控制反转)【一】
- Spring框架(一)--IOC控制反转
- Spring IoC(控制反转)
- Spring IoC(控制反转)
- Spring从IOC(Inversion of Control:控制反转)开始
- Spring(二)入门案例IOC(控制反转)
- Spring初学(一)IOC控制反转注入
- Spring配置过程(一)反转控制/依赖注入IOC
- Spring入门Blog[一、Ioc控制反转注入原理]
- Spring入门Blog[一、Ioc控制反转注入原理]
- Magento从入门到精通(一)
- GUI从入门到精通(一)
- glide从入门到精通(一)
- ActiveMQ从入门到精通(一)
- ActiveMQ从入门到精通(一)
- Qt 对QTextEdit的文本编辑器进行查找操作
- 打字练习
- 十六进制
- [5-28,5-29]考试总结
- 如何用RT实现动态的阴影。(记录一下,还有些bug要解决。)
- Spring从入门到精通(一)----IoC(控制反转)
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建http://www.aboutyun.com/thread-9341-1-1.html
- C#三十五 三层架构企业应用
- poj1598Excuses, Excuses!
- 十进制与十六进制
- 文章标题
- android:在个推BroadcastReceiver中操作sqlite数据库存入clientID的坑
- 安全框架-Shiro
- 关系型数据库与非关系型数据库资料查找