Spring IoC和DI

概念

IoC:Inversion of Control .控制反转,是一种设计思想。spring中的实现为 IoC容器,分为两个主要的容器系列,一个是实现BeanFactory接口的简单容器系列,另外一个是实现ApplicationContext接口的高级容器系列。spring

DI:Dependency Injection。依赖注入。设计

对于像我同样的初学者,老是对IoC和DI的概念有着模糊不清的认识。今天我就梳理一下个人理解,努力将这两个概念描述清楚。对象

IOC

Q:控制反转首先说的是什么控制被反转了?接口

A:控制反转说的依赖对象的建立的控制权被反转了,说了更细一点:传统开发中,当咱们类的实例(对象)A里面依赖另一个对象B的时候,咱们都是直接在实例A里面new 一个对象B。这里,咱们说对象A 是拥有对象B的建立控制权的。在Spring内,对象之间的这种相互依赖管理由IOC 容器进行管理,这里,IOC容器控制了A依赖对象B的建立,因此说这里控制权被反转了。前面说过IOC容器是IOC这种设计思想的一种实现。开发

Q:这里为何用反转 这两个字来描述呢?io

A:我想,包括我在内的大多数初学者对于这里为何用“反转”这两个字来描述控制权的反转深表疑惑。毕竟在咱们看来,并不像是控制权的反转,而是控制权由本身交由第三方。容器

其实这里说的反转,咱们能够从依赖对象的获取方面来理解。传统开发中,咱们的类的实例A都是主动的去建立依赖的对象B。引入IOC思想后,对象的建立交由IOC容器来管理,这时候,咱们的类的实例A被动的接受依赖的对象B。因此这样看来,依赖对象的获取确是被反转了。依赖注入

DI

依赖注入讲的是组件之间的依赖关系的容器动态注入。注入

IOC和DI的关系

控制反转和依赖注入,实际上是同一个概念的不一样角度的描述。控制反转从依赖对象建立这个角度进行描述,依赖注入从依赖关系的角度进行描述。你们也没必须拘泥于这两个概念细节上死死拔不出来。这种概念上的理解并无什么标准答案,只要你们理解到位便可。初学者

相关文章
相关标签/搜索