ioc 与 DI | 区别简介

理解IoC和DI 本文我会为大家介绍如何理解IoC和Di,已经为什么Spring会被叫作包含众多工具方法的IoC容器 阅读详情

看到一个对这个概念很好诠释的帖子,特转发过来供大家一起学习

转载地址http://www.iteye.com/topic/692793

 

 在android butterknife 中采用注解 依赖注入 那么什么是依赖注入呢与ioc 又有什么联系

 IoC——Inversion of Control  控制反转
 DI——Dependency Injection   依赖注入


        要想理解上面两个概念,就必须搞清楚如下的问题:

  • 参与者都有谁?
  • 依赖:谁依赖于谁?为什么需要依赖? 
  • 注入:谁注入于谁?到底注入什么?
  • 控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)?
  • 依赖注入和控制反转是同一概念吗?

        下面就来简要的回答一下上述问题,把这些问题搞明白了,IoC/DI也就明白了。
(1)参与者都有谁:

        一般有三方参与者,一个是某个对象;一个是IoC/DI的容器;另一个是某个对象的外部资源。
        又要名词解释一下,某个对象指的就是任意的、普通的Java对象; IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序;对象的外部资源指的就是对象需要的,但是是从对象外部获取的,都统称资源,比如:对象需要的其它对象、或者是对象需要的文件资源等等。


(2)谁依赖于谁:

        当然是某个对象依赖于IoC/DI的容器


(3)为什么需要依赖:

        对象需要IoC/DI的容器来提供对象需要的外部资源


(4)谁注入于谁:

        很明显是IoC/DI的容器 注入 某个对象


(5)到底注入什么:

        就是注入某个对象所需要的外部资源


(6)谁控制谁:

        当然是IoC/DI的容器来控制对象了


(7)控制什么:

        主要是控制对象实例的创建


(8)为何叫反转:

        反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中。
 

        用图例来说明一下,先看没有IoC/DI的时候,常规的A类使用C类的示意图,如图7所示:



                                      图7  常规A使用C示意图

当有了IoC/DI的容器后,A类不再主动去创建C了,如图8所示:



                                     图8  A类不再主动创建C


而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中,如图9所示:


                                               图9  有IoC/DI容器后程序结构示意图


(9)依赖注入和控制反转是同一概念吗?


        根据上面的讲述,应该能看出来,依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。


(10)小结一下:

        其实IoC/DI对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了。
        这么小小的一个改变其实是编程思想的一个大进步,这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。


【IoC 和 DI 有什么区别】 阅读详情

相关推荐

SceneSplat

目标:训练一个网络,输入高斯参数 → 输出与自然语言空间对齐的特征。考虑到标注语义的 3DGS 数据有限,作者设计了。策略,让模型在无标签场景上学到有用表征。都有一个与自然语言对齐的语义特征。这是整个方法的第一步,目标是让。

weixin_61091146的博客 1286

IOC(控制反转)与DI(依赖注入)理解与区别

文章目录1.二者理解1.1、IoC(控制反转)1.2、DI(依赖注入) 1.二者理解 1.1、IoC(控制反转) 首先想说说IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。   这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去...

Tang 1770

保姆级避坑指南:在NVMe SSD上安装Ubuntu 24.04,搞定RST错误和分区方案

本文提供在NVMe SSD上安装Ubuntu 24.04的详细指南,解决RST错误和分区方案问题。从BIOS设置到分区策略优化,帮助用户充分发挥NVMe固态硬盘性能,避免常见安装陷阱,实现无痛安装和后期调优。

weixin_26976635的博客 563

依赖注入与控制反转

但是,反过来就不成立,参数传递不一定是依赖注入,可能是普通的参数,而非某个类。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。如果类A要使用别人提供的一个功能,若为了使用这功能,需要在自己的类中增加额外的代码,这就是侵入性。接口注入中,接口的名字、函数的名字都不重要,只要保证函数的参数是要注入的对象类型即可。当解决过度依赖,对具体类进行抽象的时候,便产生了Ioc,之后依赖注入的是抽象类。PHP依赖注入的3种方式:构造注入,接口注入,setter注入。

wamp0001的博客 3576

Android音频子系统分析-car_audio_configuration.xml

先附上一个例子,再逐一解释。概括来说,该文件描述了车里有哪些区域,每个区域划分了多少组,每个组包含了哪些设备,每个设备接收哪些类型的音频流。

不定时记录分享一些有用没用的东西 990

【VeriStand】从零构建HIL测试平台:核心概念、硬件选型与实战配置指南

本文详细介绍了如何从零构建HIL测试平台,涵盖核心概念、硬件选型与实战配置指南。重点解析了VeriStand生态系统的优势,包括开箱即用特性、与LabVIEW的黄金搭档配合及Python支持。通过实战案例和硬件选型建议,帮助工程师高效搭建可靠的HIL测试平台,提升测试效率与安全性。

weixin_29250573的博客 330

什么是依赖注入和控制反转

依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。 具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工

捕影世界 3671

YOLOv11改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下:详细内容参考:YOLOv11原始模型结构介绍 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检

Limiiiing的博客 8804

依赖注入和控制反转

依赖注入和控制反转 热1吴鹏建 2010-07-26 12:20 [顶]3G移动--Android开发工程师全能班 看到一个对这个概念很好诠释的帖子,特转发过来供大家一起学习 转载地址http://www.iteye.com/topic/692793      IoC——Inversion of Control  控制反转 DI——Dependency Injection   依...

xiahouchunhong的博客 1183

ConvNeXt 系列改进:二次创新 ConvNeXt:结合 RepVGG 结构重参数化,训练多分支、推理单路

2026年的视觉模型赛道呈现出一种有趣的“返璞归真”趋势——在Transformer狂飙数年之后,卷积网络正以全新的姿态回归。这其中,ConvNeXt无疑是纯卷积阵营中最耀眼的明星。从2022年Meta AI首次提出至今,ConvNeXt系列已经走过了近四年的演进之路,衍生出ConvNeXt V2、E-ConvNeXt等多个增强版本。ConvNeXt的7×7深度卷积带来了不错的感受野,却也埋下了推理效率的隐患。

ZXSXJ的博客 234

CANbus收发器ADM3053BRWZ-REEL7应用原理图设计

ADM3053 在 CAN 协议控制器与物理层总线之间创建一个 完全隔离的接口。该器件具有限流和热关断特性,可防止输出短路。额定温 度范围为工业温度范围,提供 20 引脚、宽体 SOIC 封装。该器件采用 5 V 单电源供电, 提供完全隔离的 CAN 解决方案。ADM3053 是一款隔离式控制器区域网络 (CAN) 物理层收 发器,集成隔离 DC/DC 转换器,符合 ISO 11898 标准。该器件采用 ADI 公司的。Coupler® 技术,将双通道隔离器、 CAN 收发器和 ADI 公司的。

zhusl6688的博客 1247

Spring知识归整,速看速记!

Spring知识归整,速看速记!

相关项目可以查看https://gitee.com/fan-pl或https://github.com/fpl1116 921

SAP Fiori Launchpad 概述

SAP Fiori launchpad 是托管 SAP Fiori 应用程序的 shell,并为应用程序提供导航、个性化、嵌入式支持和应用程序配置等服务。SAP Fiori Launchpad 是移动和桌面设备上 SAP Fiori 应用程序的入口点。启动板显示带有图块的主页,其中可以显示实时状态指示器,例如打开的任务数量。每个图块代表用户可以启动的业务应用程序。这包括 SAP Business Suite 事务应用程序和 SAP Smart Business 分析应用程序。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 934

【spring】IOC与DI

DI,即依赖注入(Dependency Injection),是一种实现控制反转(IOC)原则的技术手段。 容器在运⾏期间, 动态的为应⽤程序提供运⾏时所依赖的资源,称之为依赖注⼊。 可以这样理解:IOC是一种思想,而DI则是具体实现

acm_pn的博客 4112

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IoC和DI的区别

首先我们一般回答面试题都是先说出他们两个是什么,然后在说他们之间的区别.嘻嘻重点在最后后面 1.IoC(Inverse of Control 反转控制): 将对象创建权利交给Spring工厂进行管理。 理解IoC 2.DI:Dependency Injection,翻译过来就是:依赖注入。是指spring框架在创建bean对象时,动态的将依赖对象注入到bean组件中 原来在使用Spr...

sun博客 5005

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring与SpringMVC的区别 & IOC与DI的区别

1.Spring的介绍 spring是一个一站式的框架,提供了表现层(SpringMVC)到业务层(Spring)再到数据层(SpringData)的全套解决方案;Spring的两大核心是IOC与AOP,IOC(控制反转,Inversion of Control)与AOP(面向切面编程,Asepct-Orentid-Programming)为程序解耦和代码的简洁提供了支持。 目的:简化Ja...

u013184378的博客 4936

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring IoC & DI

本篇文章详细介绍了控制反转(IoC)和依赖注入(DI),它们提供了一种灵活、可扩展和可维护的方式来管理应用程序的组件和它们的依赖关系,从而降低了系统的耦合度

matexiang的博客 1645

Spring IoC/DI

IoC(inversion of Control)控制反转,也就是说spring是一个"控制反转"的容器,这里的控制权指的是bean的控制权,Spring管理的对象称之为bean,之前对象的使用方,创建对象,对象的控制权在对象的使用方手里.控制反转是指对象的控制权交给了Spring.

2302_81705247的博客 1811

面试官:IoC 和 DI 有什么区别?

IoC 是 Inversion of Control 的缩写,翻译成中文是“控制反转”的意思,它不是一个具体的技术,而是一个实现对象解耦的思想。要解释什么是解耦?就要了解什么是耦合,所谓的耦合是指:两个或两个以上对象存在依赖,当一方修改之后会影响另一方,那么就说这些对象间存在耦合。而解耦就是解除两个或两个以上对象,修改之后影响另一方的问题。那 IoC(控制反转)是如何实现解耦的呢?class A {// 调用 B 类中的 init 方法b.init();...

m0_72885838的博客 2917

第二章:重新认识IoC

什么是IOC IOC其实是一种编程思想或原则。相对于传统的编程方式(如从前文到后文这样串行顺序的方式),比如用传统方式,当我依赖一个对象,我要去创建它,对它进行属性配置,然后我才能使用这个对象。 但是对于IOC这种方式来说,它使对象或者组件的创建更为透明,不需要过多的关注细节(如创建对象、给对象设置属性,这些ioc容器都给我们设置好了),以达到解耦的目的。控制反转,简单来理解其实就是把获取依赖...

sinat_26229211的博客 373

【Spring】IoC 和 DI的关系、简单使用,从“硬编码“到“优雅解耦“:IoC与DI的Spring蜕变之旅

在Spring生态中,控制反转(IoC)与依赖注入(DI)如同硬币的两面,共同构建了松耦合的编程范式。本文深度剖析IoC作为设计思想与DI作为实现手段的辩证关系:IoC将对象控制权移交容器,而DI通过构造器、Setter等方式完成依赖传递。通过三个渐进式案例——从基础配置到图书管理系统改造,生动演示了如何用@Component和@Autowired实现组件解耦。你会发现,传统new操作符的硬编码如何被Spring的依赖注入优雅取代,使得代码维护性、扩展性得到质的飞跃。

Code哈哈笑的博客 1362

Spring详解—— IOC 和 DI 区别

我们只要提到Spring这个词,有简单了解过Spring的人基本上都会脱口而出IoC、DI和AOP这几个概念。但是对于初学者来说,一下子搞懂IoC和DI的概念还是挺麻烦的。比如之前我自己刚刚学习Spring的时候,只知道IoC能够帮我们创建对象,不再需要我们自己去创建了,并且那时IoC和DI傻傻分不清,对AOP的概念就更加不用说了。所以这次一定要好好理解。IoC(Inversion of Control)的意思是“控制反转”,它是Spring最核心的点,并且贯穿始终。IoC并不是一门技术,而是一种设计思想。

说故事的五公子 1889

IOC和DI的区别详解

IOC   inversion of control  控制反转 DI   Dependency Injection  依赖注入 要理解这两个概念,首先要搞清楚以下几个问题: 参与者都有谁?依赖:谁依赖于谁?为什么需要依赖? 注入:谁注入于谁?到底注入...

常庆伟的博客 8342

[2025]关于spring的ioc和aop?ioc和DI的区别,ioc是怎么实现的?aop是怎么实现的?

ioc的好处1:使用者不用关心引用bean的实现细节,譬如对于A a = new A(c,d,e,f);来说,如果要使用A,那还要把c,d,e,f多个类全都感知一遍,这显然是非常麻烦且不合理的 2:不用创建多个相同的bean导致浪费。 3:Bean的修改使用方无需感知。同样是上面的例子,假如说BeanA需要修改,如果没有IOC的话,所有引用到A的其他bean都需要感知这个逻辑,并且做对应的修改。但是如果使用了IOC,其他bean就完全不用感知到对于Spring的IOC来说,它是IOC思想的一种实现方式。

gwndjsh的博客 1546

Spring-IOC-DI

当我们需要创建一个非常复杂的对象时,例如MyBatis中的SqlSession对象。我们得到SqlSession对象前需要做一系列的事情的时候,就可以使用Spring的工厂模式来创建。定义想要获取的对象,例JavaBean创建JavaBeanFactoryBean用于获取JavaBean实例,需要实现FactoryBean重写 getObject getObjectType 以及 isSingleton方法,获取对象、获取对象类型、是否为单例创建。

Cw_Herry的博客 2140
上一篇: android EventBus
下一篇: 集群,负载均衡,分布式
一朵红杏
博客等级 码龄12年 51粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值