首页 > 其他分享 >如何理解IOC中的“反转”和DI中的“注入”

如何理解IOC中的“反转”和DI中的“注入”

时间:2024-03-01 10:00:26浏览次数:15  
标签:依赖 DI 对象 反转 IOC 注入

在理解 IOC 中的“反转”和 DI 中的“注入”之前,首先要理解原本的控制流程。

在传统的应用程序中,对象之间的依赖关系通常由调用方(例如客户端或者上层模块)来管理。这意味着,当一个对象需要另一个对象时,它必须自己创建或查找依赖的对象,这种控制权在对象之间的依赖关系的代码中是显式的。

现在来看 IOC 的“反转”和 DI 的“注入”:

  1. IOC 中的“反转”(Inversion of Control):

    • 在 IOC 中,控制权被“反转”了,即对象的创建和管理不再由调用方来控制,而是由容器来控制。这意味着控制权从调用方“反转”到了容器,容器负责创建和管理对象,并在需要时将对象提供给调用方。这种“反转”使得应用程序的控制流程变得更加灵活,解耦合。
  2. DI 中的“注入”(Dependency Injection):

    • 在 DI 中,依赖关系是通过“注入”的方式实现的。所谓“注入”,就是容器在创建对象时,自动将对象所依赖的其他对象注入到它里面。这样,对象之间的依赖关系不再硬编码在对象内部,而是由容器来管理和维护。依赖注入可以通过构造函数注入、Setter 方法注入、字段注入等方式来实现。

综上所述,IOC 的“反转”强调的是控制权的转移,而 DI 的“注入”强调的是依赖关系的注入。在 IOC 中,控制权被“反转”到了容器,而在 DI 中,依赖关系被“注入”到了对象中,从而实现了对象之间的解耦合。

标签:依赖,DI,对象,反转,IOC,注入
From: https://www.cnblogs.com/Si-wuxie/p/18046314

相关文章

  • aardio调用c语言dll动态库传结构体详细教程
    安装mingw32下载安装配置官方地址下载安装:https://sourceforge.net/projects/mingw/安装方法:https://blog.csdn.net/HandsomeHong/article/details/120803368↑记得最后要添加一下环境变量mingw64编译32位失败,待继续研究。https://zhuanlan.zhihu.com/p/413181676#安装完成......
  • 面试必备:一线大厂Redis缓存设计规范与性能优化
    说在前面你是否在使用Redis时,不清楚Redis应该遵循的设计规范而苦恼?你是否在Redis出现性能问题时,不知道该如何优化而发愁?你是否被面试官拷问过Redis的设计规范和性能优化而回答不出来别慌,看这篇文章就行了本文,已收录于,我的技术网站aijiangsir.com,有大厂完整面经,工作技术,架构......
  • 亿级电商流量,高并发下Redis与MySQL的数据一致性如何保证
    前言:只要使用到缓存,无论是本地缓存还是使用Redis做缓存,那么就会存在数据同步不一致的问题。先读取缓存,缓存数据有,则立即返回结果如果缓存中没有数据,则从数据库中读取数据把读取到的数据同步到缓存中,提供下次读请求返回数据这样的作法是大多数人使用缓存的方式,这样能......
  • Redis基础数据结构
    简单动态字符串SDS在Redis里面字符串随处可见比如//设置一个(key,value)为msg和helloworld的键值对setmsg"helloworld"在这里,msg和helloworld都是一个字符串.Redis自己构建了一个名为SDS(SimpleDynamicString简单动态字符串)的类,用于作为Redis底层字符串的默认实......
  • 代码随想录 第八天 | 344.反转字符串 ● 541. 反转字符串II ● 卡码网:54.替换数字 ●
    LeetCode:344.反转字符串-力扣(LeetCode)思路:双指针的想法用while循环遍历两侧指针,效率高classSolution{publicvoidreverseString(char[]s){inti=0,j=s.length-1;while(i<j){chartemp;temp=s[j];......
  • JUC系列之(八)Condition控制线程通信
    Condition控制线程通信对象等待唤醒唤醒所有Objectwait()notify()notifyAll()Conditionawait()signal()signalAll()Lock同步锁的线程通信需要通过Condition实现通过Lock+Condition实现上一节最后的生产者消费者案例packagecom.atguigu.juc;importj......
  • Redis使用方法
    Widows版下载Windows版安装包 Redis-x64-3.2.100,由于Redis是绿色软件,解压后即可使用。我放在c盘programfiles中。 使用命令行开启Redis服务 在Redis-x64-3.2.100文件夹内,地址栏输入cmd,弹出命令行窗口,输入redis-server.exeredis.windows.conf,即可开启服务。可见本服务......
  • Qt Cannot open include file: 'QtConcurrent': No such file or directory
    假期手痒用Qt写了个便笺程序,其中文件操作用到了QtConcurrent模块。噼里啪啦,一通猛如虎的操作下来,代码写完了,愉快地build+run一套,结果报错了:(Cannotopenincludefile:'QtConcurrent':Nosuchfileordirectory编译不过一声吼,操起鼠标查google。官方文档就是这么写的看......
  • WPF Binding 绑定标记扩展
    参考绑定标记扩展Binding类环境软件/系统版本说明WindowsWindows10专业版22H219045.4046MicrosoftVisualStudioMicrosoftVisualStudioCommunity2022(64位)-17.6.5Microsoft.NetSDK8.0.101手动安装Microsoft.NetSDK7.0.306Mi......
  • Camstar配置Audit Trail
     打开AuditTrail配置器  使用Camstar账号登录  新建默认查询视图  点击右侧的FiledSelection,选择详情中需要展示的字段 点击保存 点击查询 点击详情......