控制反转:
控制反转的资料的集合
参考一、
标题:向依赖关系宣战----依赖倒置、控制反转和依赖注入辨析
url:http://www.contextfree.net/wangyw/source/dip_ioc.html
说明:详细分析了几个概念的不同
参考二、
Spring guide
参考三、
WebWork In Action IOC一章
参考四、
Martin fowler的文章
http://www.blogjava.net/Files/dreamstone/DependencyInjection.rar
强烈建议大家看一下第一篇文章和第四篇,作者写的真的很好
对比依赖倒置,控制反转,依赖注入?
---------------------------------------------
1,依赖倒置:
先说明什么是"正置"
正置就是,当你设计一些类库的时候,考虑到用户的需要定义一些接口,用户的应用程序依赖这些接口
对比"正置"和"倒置"
正置:应用依赖接口,接口由类库设计者定义
优点:类库实现上自由度大,实现容易。
缺点:类库设计复杂,要预测应用的需求,同时有可能不符合应用的需求
倒置:应用定义接口,类库设计者实现接口,按照接口实现类库
优点:类库设计不再需要预测,肯定符合应用需求
缺点:类库有可能难以实现
简单来说,正置和倒置的区别在于,谁来制定标准。现实中因为需求的定义是客户决定的,所以倒置更
适合程序的设计。从需求出发,到底层实现。
使用目的:便于应用按照需求设计
关注点:接口的设计
---------------------------------------------
2,控制反转:
正常的控制:
没有一定的控制流程,下一个流程由上一个流程决定,实现应用需要自己控制流程
控制反转 :
抽象出固定的流程,实现应用就是填充流程中的一个个点。
所有的框架都是基于控制反转的。Windows GUI开发也多是这样。
目的:高度抽象,设计框架
关注点:流程的设计
---------------------------------------------
3,依赖注入
原始的情况:
应用自己new 类,或者使用工厂模式创建类
依赖注入:
容器创建类,通过构造函数,setter方法,接口等方法,运行时"注入"到应用中
实现:
Spring setter方法
webwork IOC 实现接口的方法
pico 构造函数的方法
目的:完全分离开发
关注点:构造对象
---------------------------------------------
关系:
"控制反转"是"依赖倒置"的一种,"依赖注入"是在"控制反转"的基础上,让容器来完成"注入"过程。
---------------------------------------------
最需要依赖注入的情况:
"调用者"和多个"被调用者"分别开发,分别打包分发,实施者根据实际情况决定使用哪个"被调用者"被使用
做成可配制的,这种情况是经常需要的。这个时候调用者内不能出现这样的代码:
interface inter = new interfaceimplA();类似的语句。因为使用的可能是interfaceimplB
为了避免这样语句的出现,我们直接使用接口,而对象的构造推迟,让容器根据实施者的配制来构造,并注入
正确的位置。