对IOC和DI的理解.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对IOC和DI的理解

对IOC和DI的理解首先说一下什么是IOC和DI,IOC是Inversion?of?Control(控制反转)的简写,DI是Dependency?Injection(依赖注入)的简写,martinfowler对IOC的解释为:“Inversion?of?control?is?a?common?characteristic?of?frameworks,?so?saying?that?these?lightweight?containers?are?special?because?they?use?inversion?of?control?is?like?saying?my?car?is?special?because?it?has?wheels.” ? ?我想对这一概念进行一个个人的阐述,以方便我的理解。控制反转,从字面意思来看,就是控制权由被动变主动又变为被动,或被动变主动又变为被动。从这个角度来说,IOC就变得非常容易理解了。 ??举个例子:你的主管要求你做一件事情,这个时候就存在这么几个过程, ??主管命令你做事情(这个时候主动权在主管,你是被动的) ??你接到命令做事情(这个时候主题是你,你是主动的,控制权在你手里) ??你完成事情(这个时候主题依然是你,控制权在你手里) ??报告主管做完事情(主动权又叫交到主管手里了) ??上面的整个过程就完成了一次IOC,从上面可以看出,IOC的基本思想是控制权的转换过程。 ??举个代码的例子: ??假如有Class?A,Class?B,在A内部会初始化一个B,调用B的一个方法DoMethod ??public?Class?B ??{ ??public?void?DoMethod() ??{ ??///?do?somthing; ??} ??} ??public?Class?A ??{ ??public?void?Excute() ??{ ??B?b?=?new?B(); ??b.DoMethod(); ??} ??} ??假如在Main函数中如下执行: ??A?a?=?new?A(); ??a.Excute(); ?从这两行代码来看,事实上也存在一个IOC的过程,a——b——a,理解的关键点就在A的内部调用Excute的时候,方法b.DoMethod的执行。 理解了IOC,我们再看一下DI,从上面A调用B我们可以看出,在初始化一个A的实例时,也必须实例化一个B,也就是说如果没有B或者B出了问题,A就无法实例化,这就产生了一种依赖,就是A依赖B,这种依赖从设计的角度来说就是耦合,显然它是无法满足高内聚低耦合的要求的。这个时候就需要解耦,当然解耦有很多种方法,而DI就是其中一种。不管任何一种解耦方法,都不是说使A和B完全没有关系,而是把这种关系的实现变得隐晦,不那么直接,但是又很容易实现,而且易于扩展,不像上面的代码那样,直接new一个B出来。那为什么我们总是把IOC和DI联系到一起是因为DI的基本思想就是IOC,而体现IOC?思想的方法还有另外一个,那就是Service?Locator,这个方法好像涉及到的很少。 ??DI,依赖注入,从字面意思就可以看出,依赖是通过外接注入的方式来实现的。这就实现了解耦,而DI的方式通常有三种 ??构造器注入 ??属性设置器注入 ??接口注入(我感觉接口注入是同时存在于上两种注入方式的,而不应该独立出来) ??以上的阐述只是为了先让我们能对IOC和DI有一个感性的理解,那么IOC真正解决的问题是什么呢?我们讲了那么多主动被动的问题,那我们是从什么视角来看待这个问题的呢?你是主动,而我不是主动呢?这就需要一个参照物,这个参照物是什么呢?就是容器,在容器中来体现主动和被动。“用讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓”控制反转“的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转,这是通常对IOC的一个解释。从容器的角度来看主动和被动,和由容器来控制程序之间的关系,应该是相通的,是一个意思。到这里我们就应该基本明白了,IOC要解决的就是程序之间调用的一个问题,它应该是一个层面的东西,是一个中心,就像一支乐队的指挥,而程序就是乐器,通过指挥来协调各种乐器,来演奏出美好的音乐来Resource在Sping框架中起着不可或缺的作用,Sping框架使用Resource装载各种资源,这些资源包括配置文件资源、国际化属性文件资源等。下面我们来了解一下Resource的具体实现类。 ByteArrayResource:二进制数组表示的资源,二进制数组源可以在内存中通过程序构造。 ClassPathResource:类路径下的资源,资源以

您可能关注的文档

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档