码迷,mamicode.com
首页 > 其他好文 > 详细

IOC容器和依赖反转模式

时间:2018-12-05 23:22:01      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:部分   面向   提高   实现   关联性   分类   world   需要   直接   

在这里,我们先简要地讨论依赖反转的相关概念。我们选取维基百科中关于体赖反转的叙述,把这些文字作为我们理解依赖反转这个概念的参考。这里不会对这些原理进行学理.上的考究,只是希望提供-些有用的信息,以便给读者一些自示。这个模式非常重要,它是IoC容器得到广泛应用的基础。
      
维基百科对“依赖反转”相关概念的叙述

      平在2004年。Martin Fowler就提出了“哪些方面的控制被反转了?”这个问题。他得出的结
论是依赖对象的获得被反转了。基于这个结论,他为控制反转创造了一个更好的名字:依賴注
入。许多非凡的应用(CHelloWorldjava更加优美。更加复杂)都是由两个或多个类通过彼此的
合作来实现业务逻辑的,这使得每个对象都需要与其合作的对象(也就是它所保赖的对象)的引
间。如果这个获取过程要靠自身实现,那么如你所见,这将导致代码高度耦合并且难以测试。

 

      以上的这段话概括了区赖反转的要义,如果合作对象的引用成依赖关系的管理由具体对象東完成,会导致代码的高发料合和可谢试性的降低,这对复杂的面向对象系统的设计是非常
不利的。在面向对象系统中。对象封装T数据和对数据的处理,对象的依赖关系常常体现在对数备和方法的依赖上.这些位额关系可以通过把对家的依赖注入交给框架成IoC容器来完成,
这种从具体对象手中交出控制的做法是非常有价值的,它可以在解期代码的同时提高代码的可谢试性。在极限编程中对单元测试和重构等实践的强调体现了在软件开发过程中对质量的承
话,这是软件项目成功的一个重要因素。
 
依赖控制反 转的实现有很多种方式,在Spring中, IoC容器是实现这个模式的教体,它可以在对象生成或初始化时直接将数据注人到对象中,也可以通过将对象引用注人到对象数据城中的
方式来注人对方法调用的依赖。这种依赖注人是可以递归的,对象被逐易注人。就此而言,这种方案有一种完整而简洁的美感,它把对象的依赖关系有序地建立起来,简化了对象依赖关
系的管理,在很大程度上简化了面向对象系统的复杂性。

      关于如何反转对依赖的控制,把控制权从具体业务对象手中转交到平台成者框架中,是降低面向对象系统设计复杂性和提高面向对象系统可测试性的一个有效的解决方案。它促进
TloC设计模式的发展,是loC容器要解决的核心向题。同时,也是产品化的IoC容器出
IoC原理的应用在不同的语言中有很多实现,比如SmallTalk、C++、 Java等。在同~语言的实现中也会有多个具体的产品,Spring是Java语 言实现中最著名的一个。同时,loC也是
Spring框架要解决的核心问题。
      注意  应用控制反转后,当对象被创建时,由一个调控系统内的所有对象的外界实体将其所依赖的对象的引用传递给它,即依赖被注入到对象中。所以,控制反转是关于一个对象如何
获取它所依赖的对象的引用,在这里,反转指的是责任的反转。

      我们可以认为上面提到的调控系统是应用平台,或者更具体地说是IoC容器。通过使用IoC容器,对象依赖关系的管理被反转了,转到IoC容器中来了,对象之间的相互依赖关系由loC
容器进行管理,并由loc容器完成对象的注人。这样就在很大程度上简化了应用的开发,把应用从复杂的对象依赖关系管理中解放出来。简单地说,因为很多对象依赖关系的建立和维护并
不需要和系统运行状态有很强的关联性,所以可以把在面向对象编程中需要执行的诸如新建对象、为对象引用赋值等操作交由容器统-完成。这样一来,这些散落在不同代码中的功能相同
的部分就集中成为容器的一部分,也就是成为面向对象系统的基础设施的一部分。

      如果对面向对象系统中的对象进行简单分类,会发现除了一部分是数据对象外,其他很大一部分对象是用来处理数据的。这些对象并不常发生变化,是系统中基础的部分。在很多情
况下,这些对象在系统中以单件的形式起作用就可以满足应用的需求,而且它们也不常涉及数据和状态共享的问题。如果涉及数据共享方面的问题,需要在这些单件的基础上再做进一步
的处理。

      同时,这些对象之间的相互依赖关系也是比较稳定的,一般不会随着应用的运行状态的改变而改变。这些特性使这些对象非常适合由IoC容器来管理,虽然它们存在于应用系统中,但
是应用系统并不承担管理这些对象的责任,而是通过依赖反转把责任交给了容器(或者说平台)。了解了这些背景,Spring loC容器的原理也就不难理解了。在原理的具体实现上,

Spring有着自己的独特思路、实现技巧和丰富的产品特性。关于这些原理的实现,下面会进行详细的分析。


IOC容器和依赖反转模式

标签:部分   面向   提高   实现   关联性   分类   world   需要   直接   

原文地址:https://www.cnblogs.com/QianYue111/p/10074062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!