Java的依赖注入(控制反转)

来源:互联网 发布:企业危机网络 编辑:程序博客网 时间:2024/06/06 07:12

转载自:http://blog.csdn.net/xiangzhihong8/article/details/51707776

两个主角“依赖注入”和“控制反转”:
1、二都说的都是同一件事,只是叫法不同。是一个重要的面向对象编程的法则,也是一种设计模式;
2、英文原称:依赖注入,Dependency Injection(DI);
控制反转,Inversion of Control(IoC)。
3、作用:削减计算机程序的耦合问题;
4、为什么叫“控制反转”:创建被调用者的工作不再由调用者来完成,因此称为控制反转。结合Java说,当某个Java实例需要其他Java实例时,系统自动提供一个所需要的实例,无须程序显示的new一个。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。在有控制反转之前,是由调用者负责创建他所依赖的对象;之后,由系统负责创建。
5、为什么叫“依赖注入”:纵观所有的Java应用,它们都是由一些互相协作的对象构成的。我们称这种互相协作的关系为依赖关系。假如A组件调用了B组件的方法,我们可称A组件依赖于B组件。系统创建的实例供调用者调用,也可以看作是系统将创建的实例注入调用者。
6、优点:因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCSI硬盘了)。
7、缺点:1)生成一个对象的步骤变复杂了(事实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观;
(2)对象生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高;
(3)缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。

所谓耦合是指在一个软件结构内不同模块之间互连程度的度量,
而低耦合就是指在设计一个软件时,作为一个完整的软件系统,对于各种模块与模块之间应尽可能的是其独立的存在,让每个模块尽可能的独立完成其特定的功能。
如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。
所谓内聚是指一个模块内各个元素彼此结合的紧密程度。而高内聚就是指在一个模块的内部,应该尽可能的让每个元素都紧密的相连。
也就是充分利用每一个元素的功能,各施所能,以最终实现某个功能。

0 0
原创粉丝点击