本节中重点在描述概念。
1. IOC (Inversion of Control)控制反转
- 问题产生
在java程序中我们在类之间的调用一般都是采用主动调用的方式,比如Student类调用Person类等等这样的操作,在类的调用过程中,逐渐被调用的类越来越多,这样就造成了类之间的高度耦合,当我们测试或者功能复用的时候,就会产生很大的连带效应,给我们造成诸多不便
- 问题解决
- 概念诞生
IOC的概念就是这样诞生的。具体来说就是这种解决问题的思想的体现,它指导我们如何设计出松耦合、更优良的程序,提高整个体系结构的灵活度。
站在IOC的角度就是,所有的对象都是被动的,你们都不要动,让我来找你们。IOC帮助对象找到相应的依赖对象并注入,而不是由对象主动去找。在上面的Student和Person的例子中就是,当我Student对象需要用到Person的时候,不是Student直接调用Person,而是等着IOC容器给我。(具体怎么给,后面再讲,本节只讲概念)
2. DI (dependency injection)依赖注入
这个概念跟上面的概念产生原理和思想基本一致。它的定义就是针对上面注入的过程。其关键就在一句话“谁依赖谁,为什么需要依赖,谁注入了谁,注入了什么”
- 谁依赖谁
- 为什么需要依赖
- 谁注入了谁
- 注入了什么
注入的内容就是对象需要的内容。
3. 两个概念的比较
两个概念是不同角度对同一事物的描述。控制反转是一种思想描述,依赖注入是一种现象描述。