`

IOC 、DI

 
阅读更多

(本文转自梦想风暴的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这两个概念,我们只需要去细细品味。

分享到:
评论

相关推荐

    xoohoo c# mvc3 aop ioc di

    在IT行业中,C#、MVC3、AOP(面向切面编程)、IOC( inversion of control,控制反转)和DI(Dependency Injection,依赖注入)是关键的开发概念和技术,尤其在构建可扩展、灵活和可维护的Web应用程序时。...

    Spring相关设计思想解析IOC DI DL DP.doc

    Spring框架是Java领域中极为重要的轻量级框架,它引入了控制反转(Inversion of Control,简称IOC)和依赖注入(Dependency Injection,简称DI)等核心设计思想,使得应用程序的构建更加灵活、解耦。本文将深入解析...

    IoCDI和RPC框架实现源码.zip

    实现一个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(DI)与AOP概念的理解" IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是软件设计中两个重要的概念。控制反转的意思是依赖关系的获取方式被反转了。所谓依赖,从程序的角度看,...

    手写IOC,DI,servlet

    【标题】中的“手写IOC,DI,servlet”指的是开发者独立实现的控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)机制,并结合了Java Servlet技术来构建一个轻量级的Web应用程序框架。...

    spring ioc di aop详解

    在 Spring 中,IOC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)是两个核心概念,而 AOP(Aspect Oriented Programming,面向切面编程)则是实现模块化和解耦的重要工具。现在,我们...

    关于spring的AOP ,IOC,DI的理解

    Spring的核心特性包括AOP(面向切面编程)和IOC(控制反转),以及依赖注入(DI)。以下是对这些概念的详细解释: **面向切面编程(AOP)** AOP是一种编程范式,它允许开发者将关注点从主业务逻辑中分离出来,例如...

    SpringIOC DI循环依赖实例详解

    SpringIOC DI 循环依赖实例详解 SpringIOC 是一个基于依赖注入(Dependency Injection,简称 DI)的容器,用于管理 Bean 的生命周期。 DI 循环依赖是指在 Bean 初始化过程中出现的循环依赖问题,即一个 Bean 依赖于...

    07 别整虚的!揭开Spring IoCDI的神秘面纱慕课专栏1

    IoC的实现方式就是DI,它是指将组件的依赖关系不在组件内部硬编码,而是通过外部容器动态地将依赖对象注入到组件中。例如,一个类不再自行创建它所依赖的对象,而是由Spring容器根据配置文件或注解来创建和管理这些...

    【ASP.NET编程知识】ASP.NET Core应用中与第三方IoCDI框架的整合.docx

    在描述的文档中,重点讨论了如何在 ASP.NET Core 应用中整合自定义或第三方的 IoC (Inversion of Control) 容器,即 IoC/DI 框架。在 ASP.NET Core 应用的启动过程中,`ConfigureServices` 方法用于配置服务容器,它...

    什么是Ioc和DI

    ### 什么是控制反转(IoC)与依赖注入(DI) #### 控制反转(IoC) 控制反转(Inversion of Control,简称IoC)是软件工程领域的一个设计模式,主要用于简化对象之间的依赖关系管理。在传统的面向对象编程中,对象间的...

    Ioc, DI demo

    【描述】:“Ioc, DI demo, IocPerformance-master”这个描述可能指的是一个示例项目,它演示了如何使用Inversion of Control (IoC)和Dependency Injection (DI)原则,特别是通过“IocPerformance-master”这个...

    spring练习项目.7z

    资料包含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-...

    springIOC和DI

    什么是spring,spring核心,spring优点,spring体系结构, 入门案例,DI基础,核心API,文档内附代码

    brisk-ioc:fast light brisk iocdi container on nodejs; Node下快速 轻量的IoCDI容器,依赖注入,配合装饰器使用

    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是一个快速、轻量级、...

    di_ioc_c#.zip

    依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,IoC)是软件设计模式中的核心概念,尤其在面向对象编程中扮演着重要角色。这些概念可以帮助我们构建松耦合、可测试和可扩展的代码。C#...

    Spring IOC DI AOP 事务)

    Spring框架是Java开发中不可或缺的一部分,它包含了众多核心特性,如IOC(控制反转)、DI(依赖注入)和AOP(面向切面编程),并提供了强大的事务管理能力。下面将详细阐述这些概念及其在Spring中的应用。 **IOC...

    swift-ioc:最少的纯Swift IOCDI容器实现

    这是一个简单的Swift IOC容器实现。 整个实现包含在一个文件中(不带双关语),用于快速复制和粘贴到您的项目中。 特征 简单的API。 最小的概念。 小文件。 最少的代码(少于100个LOC(不含文档))。 一个文件...

    IOC容器和DI模式.Martin Fowler

    本文中,作者深入探索IOC模式的工作原理,给它一个更能描述其特点的名字——“依赖注入”(Dependency Injection),并将其与“服务定位器”(Service Locator)模式作一个比较。不过,这两者之间的差异并不太重要,...

    IoC-DI-Xamarin-Forms:用于在Xamarin Forms中使用Unity演示IoCDI的示例应用程序

    本文将深入探讨如何在Xamarin.Forms中利用Unity应用程序接口(Unity IoC Container)实现依赖注入(Dependency Injection,简称DI)。Xamarin.Forms是一种跨平台的UI框架,用于构建原生移动应用,而Unity IoC ...

Global site tag (gtag.js) - Google Analytics