IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”,还有些书籍翻译成为“控制反向”或者“控制倒置”。
这概念太抽象了,首先从语言入手 理解这问题。
控制反转?
谁控制谁,谁反转。
这根本没有主语,这理解起来太抽象了。
那么变成,如下的关系。
class A{
void fun(){
system.out.println("A:fun");
}
}
class B{
public A mA;
public B(){
mA = new A;
}
void fun(){
b.fun();
}
}
class C{
static public void main(){
B b = new B();
b.fun();
}
}
上面的例子中,B依赖于A;B控制A的创建。
那么控制反转是不是B控制A的创建?
不是期初我也是这么理解的。
那么怎么反转呢?
就是把依赖对象的创建架构C,
那么将如下的一个描述做控制反转。
C使用B完成一个机能,B依赖于A,B创建A。
控制反转后。
C使用B完成一个机能,B告诉X,我还需要B的帮忙,X说,这个不用你管,用你的时候我自然会把A注入给你。
于是程序变成这样
class A{
void fun(){
system.out.println("A:fun");
}
}
class B{
public A mA;
public B(){
mA = new A;
}
void fun(){
b.fun();
}
}
class Spring{
//这里的具体机能略,说白了就是一一些反射技术的运用。
public objext get(String className){
object x = create(className);
return x;
}
}
class C{
static public void main(){
//主要体现在这里有变化
B b = Spring.get("B");
b.fun();
}
}
以上就是控制反转、依赖注入的过程。
B控制A的创建,变成了Spring控制A的创建,等同于C把对象创建的过程都交给了Spring来完成。
控制反转转的是啥把B对A创建的控制转给了框架,这里就相当于Spring。
依赖注入,把B对A的依赖转换成了框架为B做对象注入。
总结一下
反转就是,把对对象创建的控制转给了框架。
把依赖的关系用框架注入的方式完成。