(本文转自梦想风暴的blog)
一个朋友发了封mail问了几个问题,其中的一个是关于IoC和DI的:
Inversion of Control和Dependency Injection 是什么关系,我认为两个词代表的是同一个意思,只是两种不同的表示,对吗?
下面是我对这个问题的一些理解。
准确的说,IoC和DI并不相同,这一点从字面上就可以看出,否则,它们可以叫一个名字。^_^
理解IoC,我们需要知道Control是什么,它又是怎样被Inversion的。其实,IoC是用来说明“程序库”和“框架”区别的最好证据。在使用程序库的时候,控制权是掌握在我们手中的,我们编写的代码调用程序库的实现,完成相应的功能,想想我们使用JDK的情况。使用框架的时候,控制权则掌握在框架手中,我们的代码最终是由框架调用,一个常见的例子是Servlet,我们编写的Servlet代码是放在整个Servlet的框架中,由Web容器进行调用。这就是差异所在。我们更习惯于自己掌控一切,因此,对框架掌握控制权的这种情况,我们用“Inversion”来形容,这也是Martin Fowler在那篇给DI正名的文章中提到,所有框架都是IoC的原因。
Spring的核心容器是一个框架,所以,我们可以说它是IoC,但是就如前面所说,每个框架都有IoC,所以,仅仅用IoC是不足以说明一切的。Spring核心容器完成的是组件组装的过程,这是它和其它普通框架区别最为显著的地方。如果说用IoC描述这个框架,那么,这里所指的Control实际上是组件的组装过程。
站在Spring核心容器的层面上看,它完成组装过程是把组件所依赖的零部件给组件安装上去。站在单个组件层面上看,它所需要的零部件是由外部给它安装的,这个过程就像是把“Dependency”这管药水用注射器“Injection”到组件的身体中去,所以,我们称之为“Dependency Injection”。
完成组件组装的容器也不只是注入一种形式,还有一种常见的方式是“Dependency Lookup”,即每个组件自己去查找自己所需要的内容。至于到哪去找,也有不同的实现方式,有固定到某个地方(比如使用静态方法),有把查找点通过DI的方式注入进来等等。
Martin Fowler的文章已经很清楚的解释了IoC和DI这两个概念,我们只需要去细细品味。
相关推荐
在IT行业中,C#、MVC3、AOP(面向切面编程)、IOC( inversion of control,控制反转)和DI(Dependency Injection,依赖注入)是关键的开发概念和技术,尤其在构建可扩展、灵活和可维护的Web应用程序时。...
Spring框架是Java领域中极为重要的轻量级框架,它引入了控制反转(Inversion of Control,简称IOC)和依赖注入(Dependency Injection,简称DI)等核心设计思想,使得应用程序的构建更加灵活、解耦。本文将深入解析...
实现一个IoC/DI容器参考网址:https://blog.csdn.net/weixin_43042683/article/details/106456415 实现一个RPC框架参考网址: https://blog.csdn.net/weixin_43042683/article/details/106459282
"IOC(DI)与AOP概念的理解" IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是软件设计中两个重要的概念。控制反转的意思是依赖关系的获取方式被反转了。所谓依赖,从程序的角度看,...
【标题】中的“手写IOC,DI,servlet”指的是开发者独立实现的控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)机制,并结合了Java Servlet技术来构建一个轻量级的Web应用程序框架。...
在 Spring 中,IOC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)是两个核心概念,而 AOP(Aspect Oriented Programming,面向切面编程)则是实现模块化和解耦的重要工具。现在,我们...
Spring的核心特性包括AOP(面向切面编程)和IOC(控制反转),以及依赖注入(DI)。以下是对这些概念的详细解释: **面向切面编程(AOP)** AOP是一种编程范式,它允许开发者将关注点从主业务逻辑中分离出来,例如...
SpringIOC DI 循环依赖实例详解 SpringIOC 是一个基于依赖注入(Dependency Injection,简称 DI)的容器,用于管理 Bean 的生命周期。 DI 循环依赖是指在 Bean 初始化过程中出现的循环依赖问题,即一个 Bean 依赖于...
IoC的实现方式就是DI,它是指将组件的依赖关系不在组件内部硬编码,而是通过外部容器动态地将依赖对象注入到组件中。例如,一个类不再自行创建它所依赖的对象,而是由Spring容器根据配置文件或注解来创建和管理这些...
在描述的文档中,重点讨论了如何在 ASP.NET Core 应用中整合自定义或第三方的 IoC (Inversion of Control) 容器,即 IoC/DI 框架。在 ASP.NET Core 应用的启动过程中,`ConfigureServices` 方法用于配置服务容器,它...
### 什么是控制反转(IoC)与依赖注入(DI) #### 控制反转(IoC) 控制反转(Inversion of Control,简称IoC)是软件工程领域的一个设计模式,主要用于简化对象之间的依赖关系管理。在传统的面向对象编程中,对象间的...
【描述】:“Ioc, DI demo, IocPerformance-master”这个描述可能指的是一个示例项目,它演示了如何使用Inversion of Control (IoC)和Dependency Injection (DI)原则,特别是通过“IocPerformance-master”这个...
资料包含spring-iocdi-annotation-document,iocdi-annotation-mvc,iocdi-xml-extend,iocdi-annotation-extend proxy,jdkproxy-transaction,jdkproxy-salary,day02-itheima11-spring-08-cglibproxy,day02-itheima11-...
什么是spring,spring核心,spring优点,spring体系结构, 入门案例,DI基础,核心API,文档内附代码
BriskIoCBriskIoC is a fast, light-weight, brisk IoC/DI container to work in nodejs. It references the decorator of Spring framework and changes some usage in javascript.BriskIoC是一个快速、轻量级、...
依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,IoC)是软件设计模式中的核心概念,尤其在面向对象编程中扮演着重要角色。这些概念可以帮助我们构建松耦合、可测试和可扩展的代码。C#...
Spring框架是Java开发中不可或缺的一部分,它包含了众多核心特性,如IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程),并提供了强大的事务管理能力。下面将详细阐述这些概念及其在Spring中的应用。 **IOC...
这是一个简单的Swift IOC容器实现。 整个实现包含在一个文件中(不带双关语),用于快速复制和粘贴到您的项目中。 特征 简单的API。 最小的概念。 小文件。 最少的代码(少于100个LOC(不含文档))。 一个文件...
本文中,作者深入探索IOC模式的工作原理,给它一个更能描述其特点的名字——“依赖注入”(Dependency Injection),并将其与“服务定位器”(Service Locator)模式作一个比较。不过,这两者之间的差异并不太重要,...
本文将深入探讨如何在Xamarin.Forms中利用Unity应用程序接口(Unity IoC Container)实现依赖注入(Dependency Injection,简称DI)。Xamarin.Forms是一种跨平台的UI框架,用于构建原生移动应用,而Unity IoC ...