白话控制反正IOC和依赖注入

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做对象注入。

总结一下
反转就是,把对对象创建的控制转给了框架。
把依赖的关系用框架注入的方式完成。

猜你喜欢

转载自blog.csdn.net/xie__jin__cheng/article/details/89328448