对IOC和DI的理解

对IOC和DI的理解

ID:40641184

大小:55.00 KB

页数:9页

时间:2019-08-05

对IOC和DI的理解_第1页
对IOC和DI的理解_第2页
对IOC和DI的理解_第3页
对IOC和DI的理解_第4页
对IOC和DI的理解_第5页
资源描述:

《对IOC和DI的理解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、对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

2、 control is like saying my car is special because it has wheels.”  我想对这一概念进行一个个人的阐述,以方便我的理解。控制反转,从字面意思来看,就是控制权由被动变主动又变为被动,或被动变主动又变为被动。从这个角度来说,IOC就变得非常容易理解了。  举个例子:你的主管要求你做一件事情,这个时候就存在这么几个过程,  1、主管命令你做事情(这个时候主动权在主管,你是被动的)  2、你接到命令做事情(这个时候主题是你,你是主动的,控制权在你手里)  3、你完

3、成事情(这个时候主题依然是你,控制权在你手里)  4、报告主管做完事情(主动权又叫交到主管手里了)  上面的整个过程就完成了一次IOC,从上面可以看出,IOC的基本思想是控制权的转换过程。  举个代码的例子:  假如有Class A,Class B,在A内部会初始化一个B,调用B的一个方法DoMethod  public Class B  {  public void DoMethod()  {  /// do somthing;  }  }  public Class A  {  public void Excute

4、()  {  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,这种依赖从

5、设计的角度来说就是耦合,显然它是无法满足高内聚低耦合的要求的。这个时候就需要解耦,当然解耦有很多种方法,而DI就是其中一种。不管任何一种解耦方法,都不是说使A和B完全没有关系,而是把这种关系的实现变得隐晦,不那么直接,但是又很容易实现,而且易于扩展,不像上面的代码那样,直接new一个B出来。那就是为什么我们总是把IOC和DI联系到一起,是因为DI的基本思想就是IOC,而体现IOC 思想的方法还有另外一个,那就是Service Locator,这个方法好像涉及到的很少。  DI,依赖注入,从字面意思就可以看出,依赖是通过

6、外接注入的方式来实现的。这就实现了解耦,而DI的方式通常有三种:  构造器注入  属性设置器注入  接口注入(我感觉接口注入是同时存在于上两种注入方式的,而不应该独立出来)  以上的阐述只是为了先让我们能对IOC和DI有一个感性的理解,那么IOC它真正解决的问题是什么呢?我们讲了那么多主动、被动的问题,那我们是从什么视角来看待这个问题的呢?为什么你是主动,而我不是主动呢?这就需要一个参照物,这个参照物是什么呢?就是容器,在容器中来体现主动和被动。“用通俗话讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接

7、操控。这也就是所谓”控制反转“的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转",这是通常对IOC的一个解释。从容器的角度来看主动和被动,和由容器来控制程序之间的关系,应该是相通的,是一个意思。到这里我们就应该基本明白了,IOC要解决的就是程序之间调用的一个问题,它应该是一个逻辑层面的东西,是一个指挥中心,就像一支乐队的指挥,而程序就是乐器,通过指挥来协调各种乐器,来演奏出美好的音乐来Resource的概念Resource在Sping框架中起着不可或缺的作用,Sping框架使用Resource装载

8、各种资源,这些资源包括配置文件资源、国际化属性文件资源等。下面我们来了解一下Resource的具体实现类。·ByteArrayResource:二进制数组表示的资源,二进制数组源可以在内存中通过程序构造。·ClassPathResource:类路径下的资源,资源以相对于类路径的方式表示,如:newClassPathResource

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。