像Spring这样的框架都提供了对IOC(Inversion of Control)的支持,但IOC反转的到底是什么呢?
为了说清楚这个问题,需要先定义几个概念。
1. 依赖对象(Dependent Object):依赖于别的对象来实现其功能的对象。
2. 被依赖对象(Dependency Object):被别的对象依赖的对象。
比如:
public class DependentClass
{
private DependencyClass mA;
}
那么,对于DependentClass的对象b来说,b.mA指向的就是一个被依赖对象,b就是一个依赖对象。
对于没有采用IOC框架的应用来说,依赖对象(比如对象b)必须要自己控制如何实例化被依赖对象(比如b.mA),比如在DependentClass的构造方法中去实例化mA。
public DependentClass()
{
mA = new DependencyClass();
}
但是,对于那些采用了IOC框架(比如Spring)的应用来说,依赖对象(比如对象b)可以将实例化被依赖对象(比如b.mA)的工作委托给IOC框架来完成。也就是说,这些应用不需要再自己控制被依赖对象的实例化过程了。换句话讲,IOC框架反转了对被依赖对象的实例化过程,即从应用程序自己控制变成了框架控制。
这就是IOC的真正含义!