本文转载自博客:https://www.cnblogs.com/xinhuaxuan/p/6132372.html

1、控制反转:谁控制谁?控制什么?为何叫反转(对应于正向)?哪些方面反转了?为何需要反转?

  • 谁控制谁?

IoC/DI 容器控制应用程序。

  • 控制什么?

IoC/DI 容器控制对象本身的创建、实例化;IoC/DI 容器控制对象之间的依赖关系。

  • 为何叫反转(对应于正向)?

因为现在应用程序不能主动去获取外部资源了,而是被动等待 IoC/DI 容器给它注入它所需要的资源,所以称之为反转。

  • 哪些方面反转了?

创建对象的方式;程序获取资源的方式。

  • 为何需要反转?

引入 IoC/DI 容器过后,体系更为松散,而且管理更有序;类之间真正实现了松散耦合。

2、依赖:什么是依赖(按名称理解、按动词理解)?谁依赖于谁?为什么需要依赖?依赖什么东西?

  • 什么是依赖(按名称理解、按动词理解)?

按名称理解:依赖关系;按动词理解:依赖的动作。

  • 谁依赖于谁?

应用程序依赖于 IoC/DI 容器。

  • 为什么需要依赖?

因为发生了反转,应用程序依赖的资源都是 IoC/DI 容器里面。

  • 依赖什么东西?

应用程序依赖于 IoC/DI 容器,依赖 IoC/DI 容器为它注入所需要的资源(如:依赖关系)。

3、注入:谁注入于谁?注入什么东西?为何要注入?

  • 谁注入于谁?

IoC/DI 容器注入于应用程序。

  • 注入什么东西?

注入应用程序需要的外部资源(如:依赖关系)。

  • 为何要注入?

因为程序要正常运行需要这些外部资源。

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

  • 不是同一概念,但实际上它们描述的是同一件事情,只不过是从不同角度来说的:控制反转是从 IoC/DI 容器的角度;依赖注入是从应用程序的角度。
  • 控制反转的描述:IoC/DI 容器反过来控制应用程序,控制应用程序锁所需要的外部资源(如:外部资源)。
  • 依赖注入的描述:应用程序依赖 IoC/DI 容器,依赖它注入所需要的外部资源。

5、参与者都有哪些?

  • IoC/DI 容器、应用程序。

6、IoC/DI 是什么?能做什么?怎么做?用在什么地方?

  • IoC/DI 是什么?

IoC:就是使用 IoC/DI 容器反过来控制应用程序所需要的外部资源,这样的一种程序开发思想。

DI:就是应用程序依赖 IoC/DI 容器来注入所需要的外部资源,这样一种程序的开发思想。

  • 能做什么?

松散耦合对象。

  • 怎么做?

可以选择使用 Spring 框架,里面有大量已经实现了的 IoC/DI 容器。

  • 用在什么地方?

凡是程序里面需要使用外部资源的情况,都可以考虑使用 IoC/DI 容器。

7、什么是外部资源?

  • 对于一个类来讲,外部资源就是指在本类内部不能得到或实现的东西,比如:在类里面需要读取一个配置文件,那么这个配置文件就相当于这个类的外部资源。又比如:A 类里面要调用 B 类,那么对于 A 类来讲 B 类就是其外部资源。

8、什么是 IoC 容器?

  • 简单理解就是:实现 IoC 思想,并提供对象创建、对象装配以及对象生命周期管理的软件就是 IoC 容器。
  • 对 IoC 的理解:

a、应用程序无需主动 new 对象,而是描述对象应该如何被创建。

b、应用程序不需要主动装配对象之间的依赖关系,而是描述需要哪个服务,IoC 容器会帮你装配,你只需被动接受装配。

c、主动变被动,是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。

9、使用 IoC/DI 容器开发需要改变思路

  • 应用程序不主动创建对象,但要描述创建它们的方式。
  • 在应用程序代码中不直接进行服务的装配,但是要描述哪一个组件需要哪一项服务,由容器负责将它们装配在一起。也就是说:所有的组件都是被动的,组件初始化和专供都由容器负责,应用程序只是在获取相应组件后实现功能即可。

深入理解 IoC、DI的更多相关文章

  1. 深入理解IoC/DI

    ------------------------------------------------------------------------ 理解IoC/DI 1.控制反转 --> 谁控制谁 ...

  2. 如何理解IoC/DI

    IoC:Inversion of Control,控制反转DI:Dependency Injection,依赖注入 要理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁?依赖:谁依赖于谁?为什么 ...

  3. PHP程序员如何理解IoC/DI(转)

    php - Dependency Injection依赖注入 和 自动加载 各自的优缺点 ioc/di和自动加载时两回事. ioc/di 让代码由创建对象改为注入对象,是一种编程思想,而自动加载,只是 ...

  4. Spring理解IOC,DI,AOP作用,概念,理解。

    IOC控制反转:创建实例对象的控制权从代码转换到Spring容器.实际就是在xml中配置.配置对象 实例化对象时,进行强转为自定义类型.默认返回类型是Object强类型. ApplicationCon ...

  5. PHP程序员如何理解IoC/DI

    思想是解决问题的根本 思想必须转换成习惯构建一套完整的思想体系是开发能力成熟的标志 详情请点击

  6. 深入理解IoC和DI

    本文章转载自: https://segmentfault.com/a/1190000005602011 最近在研究php的lumen框架和phalcon框架,这两个框架的底层架构都用到了IoC,DI, ...

  7. Spring.Net---3、IoC/DI深入理解

    ------------------------------------------------------------------------ 理解IoC/DI 1.控制反转 --> 谁控制谁 ...

  8. 6. Laravel5学习笔记:IOC/DI的理解

    介绍 IOC 控制反转 Inversion of Control 依赖关系的转移 依赖抽象而非实践 DI 依赖注入 Dependency Injection 不必自己在代码中维护对象的依赖 容器自己主 ...

  9. 工厂方法模式与IoC/DI

    IoC——Inversion of Control  控制反转 DI——Dependency Injection   依赖注入 1:如何理解IoC/DI        要想理解上面两个概念,就必须搞清 ...

  10. 设计模式之初识IoC/DI(六)

    本篇和大家一起学习IoC和DI即控制反转和依赖注入. 当然听上去这词语非常的专业,真不知道是怎么组出来的,看上去难归看上去难,但稍微理解一下也就这么回事了. 首先我们要明白IoC/DI干嘛用的,不然别 ...

随机推荐

  1. 验证Kubernetes YAML的最佳实践和策略

    本文来自Rancher Labs Kubernetes工作负载最常见的定义是YAML格式的文件.使用YAML所面临的挑战之一是,它相当难以表达manifest文件之间的约束或关系. 如果你想检查所有部 ...

  2. 比PS还好用!Python 20行代码批量抠图

    你是否曾经想将某张照片中的人物抠出来,然后拼接到其他图片上去,从而可以即使你在天涯海角,我也可以到此一游? 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在 ...

  3. MySQL--->存储引擎及图形化工具

    本章目标: 掌握MySQL存储引擎的特点 掌握Navicat图形化工具的使用 了解其他的一些图形化管理工具 1.存储引擎种类: 2. 表级锁和行级锁: 3.常见的引擎: InnoDB 存储引擎 MyI ...

  4. MyBatisPlus配置日志,CRUD的使用

    配置日志 我们所有的sql在mybatisplus是不可见的,所以在开发中需要配置日志,开发完成后,就可以取消日志了,因为日志也是损耗资源的 #配置日志 mybatis-plus: configura ...

  5. Nginx介绍,安装,配置

    引言 为什么要学习Nginx 问题一: 客户端到底要将请求发送给哪台服务器? 问题二: 如果所有客户端的请求都发送给了服务器1,那另一台岂不是废了 问题三: 客户端发送的请求可能是申请动态资源的,也可 ...

  6. SpringBoot ---yml 整合 Druid(1.1.23) 数据源

    SpringBoot ---yml 整合 Druid(1.1.23) 数据源 搜了一下,网络上有在配置类写 @Bean 配置的,也有 yml 配置的. 笔者尝试过用配置类配置 @Bean 的方法,结果 ...

  7. 基于Prometheus和Grafana打造业务监控看板

    前言 业务监控对许许多多的场景都是十分有意义,业务监控看板可以让我们比较直观的看到当前业务的实时情况,然后运营人员可以根据这些情况及时对业务进行调整操作,避免业务出现大问题. 老黄曾经遇到过一次比较尴 ...

  8. Salesforce学习笔记之Actions and Recommendations(续)

    上次对这个Actions and Recommendations进行了初步研究,因为一些问题没有得到很好的解决,又花了很多时间,终于得到了一个比较好的解决方案.小结一下. 1. 生成Actions a ...

  9. 感谢 Vue.js 拯救我这个前端渣渣,让 PowerJob 有了管理后台界面

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 对于大部分非前端程序员来说,写网页无疑是一件非常痛 ...

  10. Dbeaver连接Hive和Mysql的配置

    1.连接Hive 首选需要配置Hive 这里我们采用的是JDBC的连接方式 (1) 在Hive中后台启动hiveserver2 [root@hadoop-101 hive]# bin/hiveserv ...