IoC(控制反转)和DI(依赖注入)

iOS控制反转(IoC)与依赖注入(DI)的实现 背景最近接触了一段时间的SpringMVC,对其控制反转(IoC)和依赖注入(DI)印象深刻,此后便一直在思考如何使用OC语言较好的实现这两个功能。Java语言自带的注解特性为IoC和DI带来了极大的方便,要在OC上较好的实现这两个功能,需要一些小小的技巧。控制反转和依赖注入控制反转简单来说,将一个类对象的创建由手动new方式改为从IOC容器内获取,就是一种控制反转,例如我们现在要创建一个Class 阅读详情

一、举例

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


                                      图1  常规A使用C示意图

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


                                     图2  A类不再主动创建C


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

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

 

4、依赖注入和控制反转是同一概念吗?

        依赖注入和控制反转是对同一件事情的不同描述。

        依赖注入:应用程序依赖容器创建需要的外部资源并注入;

        控制反转:应用程序主动获取需要的外部资源,变为应用程序被动接收需要的外部资源。

5、小结:

       应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待容器来创建并注入它所需要的资源了。体现了松耦合的编程思想。

 

二、总结

  IoC(Inversion of Control),即“控制反转”,是一种设计思想;DI(Dependence Injection)依赖注入。

  ●谁控制谁:一般开发,当前对象创建依赖对象,当前对象控制依赖对象;IoC则有一个容器来创建这些对象,由容器来控制对象的创建和使用。

  ●何为反转:一般开发,在当前对象中控制依赖对象,这是正;反转则是由容器控制依赖对象。容器创建和注入依赖对象,当前对象只是被动的接受依赖对象。

  ●主从换位:当前对象处于主导地位,在IoC/DI思想中,当前对象处于从属地位,被动等待容器来创建和注入依赖对象。

  ●设计思想:好莱坞法则:“别找我们,我们找你”;即容器帮当前对象找依赖对象并注入,而不是由当前对象主动去找。

 

IoC控制反转 & DI依赖注入 IoC 对于FruitController类 //private FruitService fruitService = new FruitServiceImpl(); //使用new表示Controller和下层的FruitServiceImpl有关系了,当下层改动时本层及以上会受影响 private FruitService fruitService = null ; //改成null 若删除FruitServiceImpl不会报错,但此层因为空指针无法运行 要解决空指针问题, 阅读详情

相关推荐

那些年对支付宝的研究[整理]

支付宝功能强大.他内部各个功能间的跳转是通过Uri 实现的.而使用window.location.href 即可.跟浏览器一样的协议.很方便 H5启动支付宝: alipays://platformapi/startapp?appId=20000067&url=网址 alipays://platformapi/startapp?appId=20000691&url=网址 ali...

技术专研 8915

什么是控制反转(Inversion of Control)

控制反转/Ioc = = 数清楚回调接口soooooort()中o的个数。除此之外,IoC没有任何其他含义。 在阅读[1.2.4抛弃DIP]、[1.3.3什么是好莱坞法则]、[2.2模板方法模式]和[3.2.3什么是依赖注入]时,回头看看本节。

yqj2065的博客 1万+

onnx入门教程(一):解决模型部署中的难题

直接使用 PyTorch 模型的话,我们修改几行代码就能实现模型输入的动态化。但在模型部署中,我们要花数倍的时间来设法解决这一问题。现在,让我们顺着解决问题的思路,体验一下模型部署的困难,并学习使用自定义算子的方式,解决超分辨率模型的动态化问题。刚刚的报错是因为 PyTorch 模型在导出到 ONNX 模型时,模型的输入参数的类型必须全部是 torch.Tensor。而实际上我们传入的第二个参数" 3 "是一个整形变量。这不符合 PyTorch 转 ONNX 的规定。我们必须要修改一下原来的模型的输入。

图像学习之旅 1128

ioc与依赖注入

IOC就是一个Spring特有的,用来装类对象的,就是我们用Spring框架时,不需要new对象了,不过我们需要让我们的Spring知道我们写了哪些配置和需要用什么,所以这时我们就要引用Spring的注解或者在配置xml文件上配置我们的类配置,就是在我们自己写的类上加上@Component、@Controller、@Service、@Repository等等这些让我们的Spring知道我们等下要调用有哪些类,让它先准备准备,等下我们需要用了,就getBean或者通过@Autowrite、@Resource来

weixin_71307869的博客 1596

超详细的YOLOv8项目组成解析:一站式指南了解其架构与组件

最近的更新是关于“Segment ONNX Runtime example”的,意味着它添加了对ONNX运行时的支持,特别是针对模型分割功能的支持。这些文件和文件夹共同工作,以确保 YOLOv8 的文档是全面的、多语言的,并且始终保持最新。这些示例涵盖了从基本的对象检测到更复杂的图像分割和视频处理任务,为开发者提供了丰富的学习资源和应用指导。最近的更新也是关于 ONNX 运行时示例。这些文件夹共同构成了 YOLOv8 的基础框架,从数据处理和模型配置到实际的训练和推理引擎,以及实用工具和高级功能的实现。

CDBmax的博客 1万+

合规批量下载美国上市公司年报数据的一些经验和总结

本文总结了使用Python脚本批量下载和处理美国上市公司SEC报告的技术经验。通过CIK代码查询SEC EDGAR系统,生成特定日期和报告类型的URL,并使用Selenium和Requests库下载报告内容。流程包括数据获取、文件下载、Excel处理和多线程优化,确保高效处理几百条数据。关键技术挑战包括SEC访问限制、动态网页内容和数据完整性,解决方案包括设置合规的User-Agent、使用Selenium模拟浏览器行为以及错误日志记录。最佳实践包括模块化设计、多线程优化和严格遵守SEC合规性。该自动化流程

jyfool的博客 1635

Spring——IOC(依赖注入)的三种方式

Spring ioc依赖注入的三种方式

qq_39350797的博客 571

北斗导航 | 卫星导航接收机原理(基础)

卡尔曼滤波,最小二乘,伪距,芯片,模组,接收机,捕获,跟踪,RTK,RTD,PPP,SPP,多普勒,DOP,灵敏度,热启动,冷启动,PNT,北斗发展,MEO,IGSO,GEO,ICD,导航电文,载波,载噪比

尘世冰封的专栏 2341

IOC 配置,依赖注入的三种方式

IOC配置 依赖注入 IOC是思想方法,DI是具体实现

m0_59519985的博客 1112

刷机维修进阶教程-----adb禁用错了系统app导致无法开机 如何保数据无损恢复机型

在刷机维修过程中 。我们会遇到一些由于客户使用adb指令来禁用手机app而导致手机无法开机进入系统的故障机型。通常此类问题机型有好几种解决方法。但如果客户需要保数据来恢复机型。其实操作也是很简单的.还有类似误删除应用导致不开机等等如何保数据。  通过博文了解💝💝💝    1💝💝💝----adb禁用或者删除系统app导致无法开机的几种解决方法 2💝💝💝----如何保数据来无损恢复机型 3💝💝💝----其他保数据解决系统类故障无法开机的步骤解析

小马哥的专栏 1352

网工、运维利器:MobaXterm,一款全能的远程工具

你好,这里是网络技术联盟站,我是瑞哥。是一款由Mobatek开发的多功能远程计算机管理工具,集成了多种网络协议和工具,专为网络工程师和系统管理员设计。它提供了丰富的远程连接功能,包括SSH、RDP、VNC、X11转发等,支持文件传输和多标签界面,内置了文本编辑器和多种网络工具,是一款全能的远程管理软件。MobaXterm的开发起始于2008年,最初只是一个简单的X服务器,但随着用户需求的不断增加和软件的逐步完善,MobaXterm逐渐发展成了一款功能全面、界面友好的远程管理工具。

网络技术联盟站 5229

Spring--IOC和依赖注入

学习Spring

qq_45688655的博客 569

PyTorch深度学习实战(6)——神经网络性能优化技术

神经网络性能优化技术是指通过改进神经网络的结构、参数初始化、正则化和训练过程等方面来提高其性能和泛化能力的方法。优化技术的选择和调试需要根据具体问题进行,通过不断实验和调整,找到最适合网络的优化策略。本节首先训练了一个简单的全连接网络,然后在此基础上介绍了简单有效的神经网络性能提升技巧。

盼小辉丶的博客 1万+

控制反转IOC和依赖注入DI详解

本文介绍了Spring框架中的控制反转IOC和依赖注入DI,欢迎阅读,共同学习,一起进步。 Spring框架基础参考:深入学习Spring基础 文章目录一.入门程序和IOC简介二.IOC-控制反转三.DI-依赖注入四. IOC和DI五.Spring框架使用(IoC)六.注入类型的三种方式 一.入门程序和IOC简介 依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作,该工作由S...

末尾卡片和博主交流学习! 2865

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IOC控制反转与DI依赖注入

本文详细介绍了Spring框架中的IOC(控制反转)和DI(依赖注入)核心概念。主要内容包括:1)通过创建Maven项目案例演示XML配置方式管理Bean;2)解释IOC是将对象控制权交给容器管理的思想,DI是实现IOC的具体方式;3)分析Bean的三种装配策略(ByName/ByType)和三种配置方式(XML/Java/注解);4)详解依赖注入的三种方式(setter/构造器/注解)及复杂类型注入;5)介绍常用注解(@Component/@Autowired等)及其区别。

xg_960的博客 1310

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringBoot解耦:控制反转(IOC)与依赖注入(DI)

本文深入解析了SpringBoot框架中的控制反转(IoC)和依赖注入(DI)机制。通过对比传统硬编码方式和SpringBoot实现方式的代码示例,阐述了IoC将对象创建权交给容器、DI实现松耦合注入的核心思想。文章详细介绍了三种声明Bean的注解(@Component及其衍生注解)、三种依赖注入方式(构造器/属性/Setter方法)以及解决多Bean冲突的三种方案(@Primary/@Qualifier/@Resource)。

大家好,我是张小白! 1916

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Spring IoC【控制反转】DI【依赖注入】

IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序

很高兴你能看到这里 1820

IOC控制反转DI依赖注入详解

IOC:对象的创建控制权给容器了DI:容器自动为应用程序注入它所需的对象。

qq_42736179的博客 1100

Spring的DI依赖注入和IOC控制反转

1.轻量级:Spring是非侵入性的-基于Spring开发的应用中的对象可以不依赖于Spring的API2.依赖注入(DI---dependency injection、IOC)3.面向切面编程(AOP---aspect oriented programming)4.容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期5.框架:Spring实现了使用简单的组件配置组合成一个复杂的应用。在Spring中可以使用XML和Java注解组合这些对象。

2201_75345199的博客 927

Spring中的控制反转和依赖注入(IoC和DI)以及常见面试题

Spring在不同情景下呢有不同的意思。(1)比如说你的项目里面使用到了Spring,那这里的Spring指的是Spring家族包含了各种各样的框架;(2)要是说Spring有什么特点其中一个是IoC那么这里指的就是Spring Core,Spring Framework。(Spring Core 是 Spring Framework 的核心模块,主要负责实现 IoC 和 DI 功能;

change_topic的博客 1936

依赖注入IOC和控制反转DI 的一些细节

依赖注入IOC和控制反转DI 的一些细节 IoC——Inversion of Control 控制反转DI——Dependency Injection 依赖注入 要想理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁? 依赖:谁依赖于谁?为什么需要依赖? 注入:谁注入于谁?到底注入什么? 控制反转:谁控制谁?控制什么?为何叫反转(有反转就...

ai_64的博客 2071

PHP依赖注入和控制反转(DI,IoC)

PHP依赖注入和控制反转(DI&&IoC) User: Jeremy.Ke Time: 2019/6/25 3:32 1 理论分析 1.1 概念 依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。 (1)依赖注入是从应用程序的角度在描述,可以把依赖注入,即:应用程序依赖容器创建并注入它所需要的外部资源; (2)而控制反转是从容器的角度在描...

jeremy_ke的博客 4271

控制反转IOC与依赖注入DI

一、名词解释 IoC:Inverse of control,控制反转; DI:Depedency Injection 依赖注入 IoC和DI是从不同角度描述同一件事情,即DI模式是Ioc的具体实现方式,通过引入IoC容器,利用依赖关系注入,实现对象的解耦。

lexinquan的专栏 3313

依赖注入(DI)和控制反转(IOC)

首先要解决的两个问题。1.什么是控制反转和依赖注入2.为什么我们需要控制反转和依赖注入什么是控制反转和依赖注入控制反转(Inversion of control) 是一种解耦的思想,它顾名思义,就是控制权的转移,比如项目经理让你改需求,这里就发生了控制权的转移,主要有三步:1.项目经理要求你添加功能 (这时,控制权在项目经理)2.你接到通知后开始添加功能需求 (控制权在你手上)3.交付需求成品(控制

小辣抓 4767

控制反转( IoC)和依赖注入(DI)

控制反转( IoC)和依赖注入(DI) tags: 容器 依赖注入 IOC DI 控制反转 引言:如果你看过一些框架的源码或者手册,像是laravel或者tp5之类的,应该会提到容器,依赖注入,控制反转等词汇。或者是某些面试官会问到这类问题。希望这篇文章能让你有所收获。 1.1、IoC(控制反转 Inversion of Control) 简述:控制反转并不是一种技术,而是...

vinter_he 1万+

什么是IOC(控制反转)、DI(依赖注入)

原文地址(摘要了部分内容):https://blog.youkuaiyun.com/qq_22654611/article/details/52606960/ 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC...

qq_42709262的博客 8万+
上一篇: 有符号类型和无符号类型
下一篇: SpringMVC
安卓学吧
博客等级 码龄11年 110粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值