Spring IOC浅谈

    学过Spring框架的童鞋们肯定都知道IOC容器,可能大家都会使用它,无非就是通过注解或者配置文件能够自动生成对象实例,然后通过ApplicationContext或者进行调用或者进行依赖注入,但是真要我们说说IOC是个什么东西,可能大家不一定能够说得上来,最近在网上搜了很多文章,自己也学到了不少东西,下面将总结的东西写下来作为知识积累。

IOC容器出现的背景

    我们都知道,在一个面向对象的系统中,它是有很多个对象共同组成,然后各个对象相互合作,最终实现系统的功能。这里举个例子,就是用过机械表或者传动轴承的筒子应该知道,各个齿轮是相互嵌套,一个齿轮出了问题,整个表或者传动轴承就不能工作了。而这个各个齿轮的关系,跟软件系统中的各个对象间的关系和非常类似的。对象间的耦合是无法避免的也是不可或缺的,但是随着软件系统的功能越来越复杂,对象间的关系也越来越复杂,耦合程度也越来越高,稍微加个简单的功能可能实现起来都非常复杂。

    基于上面这个问题,“解耦”这个词就出现了。如何实现软件系统中的各个对象间的解耦,这永远是软件工程所追求的目标之一,从而IOC理论应运而生,到目前为止,它已经被广泛的应用到了软件系统的开发中,典型Spring框架。

IOC是什么

    IOC全称叫做Inversion Of Control,翻译为控制反转的意思。IOC意思就是一个系统开发一个第三方容器,有它控制对象的产生,并控制他们之间的依赖关系,而对象本身不用管它跟哪个对象有什么关系。这就实现了上面所说的“解耦”。具体实现见按下图:


    由上图我们可以清楚的看到,整个系统中各个对象的依赖关系是通过第三方IOC容器实现的。这可以体现出控制的意思,我们只用在程序里面声明各个Class,但是这些Class对应对象的产生以及他们的依赖关系都是IOC容器控制的。如果对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。由于IOC容器的加入,这种情形就完全改变了,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。

    通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。


猜你喜欢

转载自blog.csdn.net/qq824570123/article/details/80338319
今日推荐