IOC控制反转 & 依赖注入(反转)的理解

1.什么是控制? 如下图所示,我们看到了 软件系统中 对象的 高耦合现象。全体齿轮的转动由一个对象来控制,如类B。

2.什么是控制反转? 是用来对对象进行解耦借助第三方实现具有依赖关系的的对象之间的解耦。这个第三方就是 ioc 容器。引入了 ioc 容器后,对象 A、B、C、D 之间没有了依赖关系全体齿轮转动的控制权交给容器。这时候齿轮转动控制权不属于任何对象,而属于ioc 容器,所以控制权反转了,从 某个对象转到了 ioc 容器。

3. 什么是依赖注入?

3.1 什么是依赖?依赖就是指一种关系,如果在类A中创建了类B的实例,我们说类A依赖类B。
3.2 看个例子:

出现的问题(problems):

问题1:如果现在要改变类B生成方式,如需要用new B(String name)初始化B,需要修改 类A中的源代码;

问题2:如果想测试不同B对象对A的影响很困难,因为B的初始化被写死在了A的构造函数中;

问题3:如果要对类B的实例进行调试时,就必须在类A中对类B的实例进行测试,增加了测试难度和复杂度;因为当出现问题时,不知道 是 类A的问题 还是 类B的问题;

解决方法:

依赖注入定义: 将B对象实例作为类A的构造器参数进行传入,在调用类A构造器之前,类B实例已经被初始化好了。像这种非自己主动初始化依赖,而通过外部传入依赖对象的方式,我们就称为依赖注入

4.依赖反转

4.1 根据依赖注入的定义:被依赖者对象并不是依赖者自己主动初始化,而是通过外部传入被依赖者的方式,那么被依赖者对象类型可以是其本身,也可以是他的实现类或继承子类;

4.2 所以,经过分析,被依赖者的对象类型并不是依赖者自身可以决定的,(当然传统的程序设计方式是依赖者 决定的),而是由外部创建者决定的,所以被依赖者类型的决定权反转了。对于spirng来说 ,就是由 spring容器决定的;

4.3 依赖反转定义:被依赖者的对象类型并不是由依赖者自身可以决定的,而是由外部创建者决定的,外部传入什么类型的对象就是什么类型的对象,依赖者对其一无所知;

你可能感兴趣的:(IOC控制反转 & 依赖注入(反转)的理解)