文章目录
  1. 1. IOC
  2. 2. DI
  3. 3. 优点
  4. 4. 缺点
  5. 5. 参考

用了很久spring,也写了几篇关于spring的blog,今天终于开始介绍Spring最核心的概念之一:IOC/DI.

IOC

IOC是Inversion of Control的缩写,“控制反转”之意。

软件系统在没有引入IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。

软件系统在引入IOC容器之后,这种情形就完全改变了,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。

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

DI

2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。

依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

优点

  1. 降低类之间耦合,可维护性比较好,非常便于进行单元测试,便于调试程序和诊断故障。
  2. 模块之间通过接口交流,互不干扰,便于团队开发。
  3. 可复用性好
  4. 模块具有热插拔特性,可直接修改配置文件。

缺点

  1. 引入了第三方IOC容器,生成对象的步骤变得有些复杂
  2. IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。
  3. 额外的配置工作。

参考

  1. Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理
  2. Spring的IOC原理[通俗解释一下]
  3. spring ioc原理(看完后大家可以自己写一个spring)
文章目录
  1. 1. IOC
  2. 2. DI
  3. 3. 优点
  4. 4. 缺点
  5. 5. 参考