先行参考以下半成品文章和参考链接,待学完课程后续整理此文章

IOC和DI关系

IOC:Inversion of Control,控制反转
DI:Dependency Injection,依赖注入
关系:IOC是一种面向编程设计思想,DI是IOC思想的实现方式,即:DI实现IOC这一思想

Q&A

那么问题来了:IOC是一种什么思想?DI实现的什么?
IOC思想:借助“第三方”,实现具有依赖关系的对象解耦合

  • 第三方的理解:Spring框架中的IOC容器
  • 实现的理解:通过引入IOC容器,利用依赖关系注入的方式创建对象(依赖注入可理解为:通过某种依赖关系,创建对象),实现对象之间的解耦
  • 对象的理解:
    • 广义上讲:对象、模块、软件系统或硬件系统
    • 狭义上讲:new 出的对象

那么问题又来了:何为耦合?
耦合:对象间的依赖关系,如下:

一个齿轮系统中,各齿轮可看做一个对象,要想此系统运动起来,各齿轮间必须协作运行,这种协作运行的状态可以成为一种耦合关系。但,耦合程度一旦过高,某个齿轮不运作,就容易导致整个齿轮系统崩溃,即:牵一发而动全身。同理,软件系统中也有此种问题存在。
为了解决软件系统中因耦合程度高,导致系统“牵一发而动全身”崩溃的问题,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的“解耦”,目前这个理论已经被成功地应用到实践当中,很多的J2EE项目均采用了IOC框架产品Spring。
解耦合后的齿轮系统,如下:

IOC容器再理解

对后续参考链接:“2【死磕 Spring】----- IOC 之深入理解 Spring IoC”的理解

抽象理解IOC容器的作用:
在没有IOC容器时,对象A想要对象B,则对象A自己创建对象B
有IOC容器时,对象A想要对象B,IOC容器创建对象B,交给对象A,即:对象A只需提需求,IOC容器代劳完成需求

实例理解IOC容器(参考链接2):
场景铺垫:小明和小翠那段不可告人的秘密…
版本1(未使用IOC):那个阳光明媚的下午,小公园里,石桌前,阳光洒在小翠的书上,微风轻轻拂过她的脸颊…小明路过此地,此情此景此人,无不让人动情,随后小明便对小翠展开了“猛烈攻势”,在一番“跪舔”下,小明终究明白了一个道理:“我应该是一个好人!”,小翠也印证了那句话:“你喜欢我没用,因为我喜欢学习!”
版本1.5(使用IOC):被小翠拒绝后的小明,“痛定思痛”,决定不再主动追求女生了,决定“两耳不闻窗外事,一心只读圣贤书”,女朋友就交给“婚介公司”吧!随后,小明在“婚介公司”登记了一下自己的信息,目标女生的要求(身高、体重、学历等),便不再主动寻求对象,而是通过婚介公司代为其寻找匹配…

上述不太有情调的例子中,对象A对应小明,对象B对应小翠,“婚介公司”对应IOC容器!

IOC 控制反转四问

如何理解“控制反转”好呢?理解好它的关键在于我们需要回答如下四个问题:

  1. 谁控制谁?
  2. 控制什么?
  3. 为何是反转?
  4. 哪些方面反转了?

现在在看上面那四个问题,答案就显得非常明显了:

  1. 谁控制谁:在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说你依赖的对象直接由你自己控制,但是有了 IOC 容器后,则直接由 IOC 容器来控制。所以“谁控制谁”,当然是 IOC 容器控制对象
  2. 控制什么:控制对象。
  3. 为何是反转:没有 IOC 的时候我们都是在自己对象中(对象A:小明)主动去创建被依赖的对象(对象B:小翠),这是正转。但是有了 IOC (“婚介公司”)后,所依赖的对象(对象B:小翠)直接由 IOC 容器(“婚介公司”)创建后注入到被注入的对象中(对象A中:小明),依赖的对象(对象B:小翠)由原来的主动获取变成被动接受,所以是反转。
  4. 哪些方面反转了:所依赖对象(对象B:小翠)的获取被反转了,即:主动获取反转为被动获取了。

“控制反转” 记忆句子:对象A主动获取对象B的方式;反转为对象B主动“送上门”对象A的方式,即:对象A获取对象B的方式由 主动反转为被动了(主动、被动以对象A的角度来说)

参考

  1. Spring的IOC原理[通俗解释一下]
  2. 【死磕 Spring】----- IOC 之深入理解 Spring IoC

Java:Spring的IOC原理(大白话解释)相关推荐

  1. Spring的IOC原理[通俗解释一下]

    2019独角兽企业重金招聘Python工程师标准>>> 本文系转载,个人认为,这篇文章对IOC原理讲的比较清楚,通俗易懂,值得一看. 原文地址:http://blog.csdn.ne ...

  2. Java反射及 IoC原理、内省机制

    JAVA反射及IoC原理.JAVA内省 1. 反射 反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述 主要指程 ...

  3. spring的IOC原理,容器管理的bean类型、bean的生命周期

    1.什么是IOC (1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理 (2)使用 IOC 目的:为了耦合度降低 为什么IOC可以极大的降低耦合度? (1)原始版:一般我们想使 ...

  4. Spring的IOC原理(通俗解释)

    1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机 ...

  5. 通俗解释一下Spring的IOC原理

    1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机 ...

  6. Java Spring的IoC和AOP的知识点速记

    Spring简介 Spring解决的最核心的问题就是把对象之间的依赖关系转为用配置文件来管理,这个是通过Spring的依赖注入机制实现的. Spring Bean装配 1. IOC的概念以及在Spri ...

  7. Spring的IOC原理

    1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机 ...

  8. 解释java程序所使用的命令是,Java程序的执行原理以及解释说明

    在初学Java的时候,我们安装完Java的开发环境后,就可以通过记事本等编辑工具编写程序了.推荐在Windows操作系统中使用EditPlus工具进行编写.由于我使用的是Mac OS,所以,我使用Su ...

  9. 1、spring之Ioc 原理应用

    Ioc实现对象实例化,不采用new  Class的方式,这就是控制反转:由容器(spring)完成对象的实例化过程. 在使用bean之前,要在beans.xml文件中配置好各个bean的属性,并建立b ...

最新文章

  1. 【机器视觉】 dev_display算子
  2. qpsk调制matlab实现,QPSK调制解调Matlab实现(ing待补充说明)
  3. 最大乘积(记忆化搜索)
  4. dht11温湿度传感器_Arduino不调用库实现DHT11数据读取
  5. C语言不挂科之我爱谭浩强——选择填空拿满分(附例题答案和知识点详解)
  6. Linux向文件中写入内容
  7. 自定义SSL证书实现单双向ssl认证记录
  8. 让Oracle跑得更快2—基于海量数据的数据库设计与优化
  9. 与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。
  10. 使用runtime跳转界面
  11. 任玉刚【Android开发艺术探索】读后笔记一
  12. Echarte柱状图文字位置
  13. 深度掌握bin、hex、axf和elf文件格式
  14. 微信java精简版低内存_微信精简版apk下载-微信精简版低内存2016 安卓版_5577安卓网...
  15. 在开发中如何正确的应对系统故障
  16. Python 使用 matplotlib 将离散的节点用光滑曲线连接
  17. mac charles网页代理https使用笔记
  18. 初学者javaweb基本使用方法
  19. 绿色数据中心空调设计 书评_书评:PHP中的实用设计模式
  20. 文件上传绕过之00截断

热门文章

  1. Windows xp下IDT Hook和GDT的学习
  2. [Usaco2014 Open]Gold Fair Photography(hash)
  3. Android HorizontalScrollView布局
  4. pku 3683 Priest John's Busiest Day 2-sat判断有误解+输出可行解
  5. 知识点 - DataList中CheckBox实现单选
  6. 海龟交易法则07_如何衡量风险
  7. 商业智能在公安交通管理领域的应用
  8. 析砂性土层php泥浆护壁,砂卵石层钻探护壁工艺分析
  9. 计算机组成原理 第一章 计算机系统概述
  10. s-palindrome