Spring | 初识IOC

快速目录

  • 如何理解IOC
  • 理解DI及其与IOC间的关系
  • IOC内容
  • Spring如何实现IOC
  • 参考资料
1 如何理解IOC

IOC全称是Inversion of Control,翻译中文就是“控制反转”。针对“控制反转”,提出三个问题:控制是谁控制谁反转怎么理解为什么要反转?正转不好吗
IOC的主要作用是创建bean以及管理其与依赖bean之间的关系,所以IOC也可以理解为各bean之间关系的集合。在没有IOC的时候,bean与bean之间都是直接依赖,也就是说A对象内部包含B对象的引用,当A对象初始化时,B对象因为依赖的关系也会跟着初始化,暂且把这个过程理解为“正转”。那么“正转”有什么不好?“正转”使得两个对象强耦合,而且存在A对象中的方法没有使用B对象而B对象已经初始化,造成空间浪费的情况。IOC就可以解决这种强耦合情况。如下图所示:
IOC
很明显,两个对象之间的关系由IOC管理。相比两对象直接依赖,IOC这种就是控制反转。那么上面的问题就有答案了:

  • 控制是谁控制谁?IOC容器控制容器中的对象,这里的例子是控制对象bean-a和对象bean-b。
  • 反转怎么理解?对象bean-a依赖对象bean-b,是直接依赖;转变为bean-a通过IOC容器间接依赖bean-b,IOC容器控制对象bean-b,是反转控制。
  • 为什么要反转?正转不好吗?“正转”具有强耦合性且浪费空间,反转以后就把对象之间的关系交由IOC容器来管理,解决强耦合的问题。
    那么我们不禁要问,IOC是如何管理对象之间的关系,又是如何创建对象的?这两个问题留着后面学习。
2 理解DI及其与IOC间的关系

我们也经常谈到“依赖注入”这个词。“依赖注入”与“控制反转”之间又是什么关系?
“依赖注入”的英文是:Dependency Injection;关于“依赖注入”提出四个问题:谁依赖谁注入什么注入到哪依赖与注入之间有什么关系
从字面意思来看,“依赖注入”还是围绕IOC容器以及其包含对象之间的关系来讨论的。了解其讨论的点就可以尝试理解上面四个问题;

  • 谁依赖谁?传统的理解为对象之间的依赖,这里利用IOC思想,理解为对象依赖IOC容器。(这样做的好处有什么?)
  • 注入什么?这里首先理解注入的含义,注入这个概念应该是随着IOC思想而运用的,因为传统对象间依赖关系是直接依赖,而IOC把这种直接依赖关系转变为间接依赖,意思就是对象本身不知道它依赖哪些对象或者资源,把这种控制权交给了IOC容器,所以由IOC容器帮助对象注入其依赖的对象或者资源。故,注入的是某对象或者应用程序依赖的对象或者资源。
  • 注入到哪?上面说到注入到某个对象或者运用程序中。
  • 依赖和注入间什么关系?间接依赖引出注入,两者是缺一不可的;IOC的简单理解就是间接依赖,那么如何实现就由注入来完成。
    所以“依赖注入”(DI)可以这样理解:某对象或者运用程序依赖IOC容器注入其依赖的对象或者其他资源。对比“控制反转”(IOC)概念,DI是站在对象的角度来解释IOC思想,而IOC是站在容器的角度来解释自身的。
3 IOC包含哪些内容?

在“Spring | 初识Spring”中提到IOC是对象间关系的集合。所以可知IOC初略解决以下几个问题:

  • IOC如何创建和管理(依赖的)对象
  • IOC如何发现对象间的关系
  • IOC如何为某对象注入其依赖的对象或者资源
    关于IOC部分的内容,后续也是根据这三个问题来展开学习的。
4 spring如何实现IOC

这部分内容将会在后续过程中进行学习,主要从源码的角度来阐述IOC的实现。计划在学习IOC如何使用之后剖析实现原理,也就是对第三小节学习完之后。

5 参考资料

《跟我学Spring》系列

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值