本篇原址:http://jinnianshilongnian.iteye.com/blog/1413846
个人只是将其精简,以便自己理解概念
IOC-Inversion of Control,控制反转。这是一种设计思想。在Java开发中,IOC思想意味着将开发者设计好的对象交给容器管理,而不是在对象内存直接控制。
理解IOC,可以从几个点出发去思考:
1、谁控制谁
2、控制什么
3、什么是正转和反转
4、哪些方面反转了
1、谁控制谁:
在传统的Java SE程序设计中,我们直接在对象内部通过new关键字进行对象创建。程序主动创建依赖对象。而IOC是一个专门的容器用来控制对象的创建。这里是IOC容器控制了对象
2、控制什么:
IOC控制对象的创建代替程序主动创建依赖对象,IOC主要控制了外部资源的获取(不只是对象)。
3、什么是正转和反转:
正转即在传统开发时,开发者在对象中主动控制去直接获取依赖对象。
如图:
反转则是由容器来帮忙创建及注入依赖对象。为何叫这种方式为反转呢?因为容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象。
如图:
IOC的功能:
通过IOC思想,实现了主从换位的变化。传统开发应用程序时主,获取资源是主动获取。但IOC中,应用程序变成被动的,被动的等待IOC容器来创建并注入它所需要的资源。
IOC和DI:
DI-Dependency Injection,依赖注入。组件之间依赖关系由容器在运行期决定。即由容器动态的将某个依赖关系注入到组件中。依赖注入是为了提升组件重用的频率,并为系统搭建一个灵活可扩展的平台。通过依赖注入机制,开发者只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
关于DI,开发者理解时也可以从下面几个点来思考:
1、谁依赖谁
2、为什么需要依赖
3、谁注入谁
4、注入了什么
1、谁依赖谁:
应用程序依赖于IOC容器
2、为什么需要依赖:
应用程序需要IOC容器来提供对象需要的外部资源
3、谁注入谁:
IOC容器注入应用程序某个对象,应用程序依赖的对象
4、注入了什么:
注入某个对象所需要的外部资源(包括对象、资源、常量数据)
IOC与DI是同一个概念不同角度的描述。依赖注入明确描述了被注入对象依赖IOC容器配置依赖对象。