IOC容器和依赖反转模式

在这里,我们先简要地讨论依赖反转的相关概念。我们选取维基百科中关于体赖反转的叙述,把这些文字作为我们理解依赖反转这个概念的参考。这里不会对这些原理进行学理.上的考究,只是希望提供-些有用的信息,以便给读者一些自示。这个模式非常重要,它是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有着自己的独特思路、实现技巧和丰富的产品特性。关于这些原理的实现,下面会进行详细的分析。

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

时间: 2024-10-08 21:08:14

IOC容器和依赖反转模式的相关文章

Spring Framework的核心:IOC容器的实现

2.1   Spring IoC容器概述 2.1.1 IoC容器和依赖反转模式 依赖反转的要义,如果合作对象的引用或依赖关系的管理由具体对象来完成,会导致代码的高度耦合和可测性的降低.依赖控制反转的实现有很多种方式,在Spring中,IoC是实现这个模式的载体,它可以在对象生成或初始化时直接将数据注入到对象中,也可以将对象引用注入到对象数据域中的方式来注入对方法调用的依赖. IoC亦称为“依赖倒置原则”:高层次的模块,不应该依赖与低层次模块,他们都依赖于抽象.抽象不应该依赖于具体的实现,具体实现

Spring技术内幕——Spring Framework的IOC容器实现(一)

一.SpringIOC容器概述 IOC容器和依赖反转的模式 在面向对象的系统中,对象封装了数据和对数据的处理,对象的依赖关系常常体现在对数据和方法的依赖上.这些依赖关系可以通过把对象的依赖注入交给框架IOC容器来完成.他可以再解耦代码的同时提高了代码的可测试性. 依赖控制反转的实现由很多种方式,在Spring中,IOC容器是实现这个模式的载体,他可以再对象生成或者初始化时直接将数据注入到对象中,也可以通过将对象引用注入到对象数据域中的方式来注入对方法调用的依赖.这种依赖注入是可以递归的,对象被逐

对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解

.概述 所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体.简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合,并由此引申出IoC.DI以及Ioc容器等概念. 2.意图 面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本. 面向对象的开发很好的解决了这个问题,一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节

对依赖倒置原则(DIP)及Ioc、DI、Ioc容器的一些理解(转)

所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体.简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合,并由此引申出IoC.DI以及Ioc容器等概念. 面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本. 面向对象的开发很好的解决了这个问题,一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象.即使

ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入

在正式进入主题之前我们来看下几个概念: 一.依赖倒置 依赖倒置是编程五大原则之一,即: 1.上层模块不应该依赖于下层模块,它们共同依赖于一个抽象. 2.抽象不能依赖于具体,具体依赖于抽象. 其中上层就是指使用者,下层就是指被使用者. 二.IoC控制反转 控制反转(IoC,全称Inversion of Control)是一种思想,所谓“控制反转”,就是反转获得依赖对象的过程. 三.依赖注入(DI) 依赖注入设计模式是一种在类及其依赖对象之间实现控制反转(IoC)思想的技术. 所谓依赖注入(DI,全

深入理解DIP、IoC、DI以及IoC容器

摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学习这些概念,并理清他们之间微妙的关系. 目录 前言 依赖倒置原则(DIP) 控制反转(IoC) 依赖注入(DI) IoC容器 总结 前言 对于大部分小菜来说,当听到大牛们高谈DIP.IoC.DI以及IoC容器等名词时,有没有瞬间石化的感觉?其实,这些"高大上"的名词,理解起来也并不是那么的

【来龙去脉系列】深入理解DIP、IoC、DI以及IoC容器

摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学习这些概念,并理清他们之间微妙的关系. 目录 前言 依赖倒置原则(DIP) 控制反转(IoC) 依赖注入(DI) IoC容器 总结 前言 对于大部分小菜来说,当听到大牛们高谈DIP.IoC.DI以及IoC容器等名词时,有没有瞬间石化的感觉?其实,这些“高大上”的名词,理解起来也并不是那么的难,关键在

【转】深入理解DIP、IoC、DI以及IoC容器

原文链接:http://www.cnblogs.com/liuhaorain/p/3747470.html 前言 对于大部分小菜来说,当听到大牛们高谈DIP.IoC.DI以及IoC容器等名词时,有没有瞬间石化的感觉?其实,这些“高大上”的名词,理解起来也并不是那么的难,关键在于入门.只要我们入门了,然后循序渐进,假以时日,自然水到渠成. 好吧,我们先初略了解一下这些概念. 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念). 控制反转(IoC):一种反转流.依赖和接口的方式(DIP的具体

深入理解DIP、IoC、DI以及IoC容器(转)

深入理解DIP.IoC.DI以及IoC容器 摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学习这些概念,并理清他们之间微妙的关系. 目录 前言 依赖倒置原则(DIP) 控制反转(IoC) 依赖注入(DI) IoC容器 总结 前言 对于大部分小菜来说,当听到大牛们高谈DIP.IoC.DI以及IoC容器等名词时,有没有瞬间石化的感觉?其实,这些“高大