控制反转(IOC)

IOC(inversion of control)是spring的核心,就是由spring来控制对象的周期和对象间的关系。

  • 传统开发模式:对象间相互依赖,比如A对象中引入B对象,要使用new B();
  • IOC开发模式:将对象之间的依赖关系交给IOC容器来做。

先看下图,我们来了解应该如何来完成一套好的架构
这里写图片描述

这张图是多个此轮之间相互协作,来完成一项任务。

  • 图一,我们可以看出齿轮与齿轮之间相互依赖,彼此互相耦合,少了哪一个此轮,都会影响正常的工作,这个就类似与我们的传统开发模式
  • 图二,通过IOC容器这个齿轮,带动4个此轮运转,4个此轮之间的依赖关系,完全由中间的大齿轮决定。
  • 图三,去掉了大齿轮,我们可以注意到4个齿轮之间无任何的耦合性,这个状态对于我们软件开发来说,是一个非常理想的状态。
  • 由于齿轮间没有耦合,彼此就完成自己的那部分工作就可以,在我们软件开发中这样是非常重要的,一个大的团队,团队中每个成员不用关心别的成员代码的开发进度,只要将自己的这部分代码完成即可,大大的提高了团队的开发效率。

依赖注入(DI)

其实它是控制反转的另一个名字,只是从不同的角度来进行了说明。
所谓的依赖注入,就是由IOC容器在运行期间,动态的将某种依赖关系注入到对象中,所以依赖注入(DI)和控制反转(IOC)是从不同角度来描述同一件事情,通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦

  • 这里我们可以举一个例子,电脑和U盘之间的关系,电脑与U盘完全是两个单独的对象,他们之间是完全解耦的,当我把U盘插到电脑上的时候,电脑就从U盘读取数据,当我把另一块U盘插在电脑上的时候,它就从另一块电脑上读取数据,在这中间我就起到了一个IOC容器的作用,我来建立哪个电脑和哪个U盘之间的关系。

IOC的好处

看到这里,我想大家自己也能总结出来有哪些好处了。

  • 降低了组件之间的耦合度(见上面图二)
  • 提高了开发效率和产品质量(由于降低了耦合度,不用担心其他模块对你的而影响)
  • 统一标准,提高模块的复用性(模块完全是独立的,谁想用就可以直接用)
  • 模块具有热插拔效果(通IOC配置文件,可以决定对象之间的依赖关系)

总结

IOC理解:

  • IOC控制反转:创建对象实例的控制权由代码控制剥离到IOC容器控制,也就是xml文件控制,侧重于原理。
  • DI依赖注入:创建对象实例时,为这个对象注入属性值或其他对象实例,侧重于实现。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐