1.IOC的理论背景

大家开发理念,一直都是奔着架构稳定、低耦合性。而IOC初衷,就是为了解决模块依赖问题,理解《六大设计原则(SOLID)》

如图所示,在我们开发中,业务的实现,就是靠着模块中的类与类、跨模块的类与类,相互调用与依赖完成的。而这就导致我们改动一个类,就会使得所有用到这个类的地方都要改一遍。比如把My SQL更换成SQL Server,我们不应该影响业务代码,只需要更改数据驱动的实现就行(我相信大家遇见过这种烦人的事情

而这个时候我们就想,可不可以不由我们自己实例化,而是交给一个专门的工厂帮我们实例化(IOC的前身其实就是工厂)为了解决这个问题,软件专家Michael Mattson提出了IOC理论

2.什么是IOC

IOC(控制反转)是Inversion of Control的缩写,为了解决背景交代的问题

  1. 控制:首先控制实例的创建,不用我们控制具体创建什么实例,而是交给工厂,类似于第三方的概念,他和我们业务没任何关系,我们面向抽象编程,由它帮我们统一控制实例创建,改变它就所有的统一改变(完美)。
  2. 反转:其次对象之间依赖不能由我们去创建,我们调用的时候,不用关心被调用的类与其他类之间的依赖关系,也交给第三方去帮我们解决依赖的问题,我们只管调用。(更完美

思路就如上图所示,但产生了另一个问题,既然调用者不关心,那当前对象所依赖的对象,怎么来,难道凭空产生?于是就有了注入这种模式的概念

3.什么是DI

DI(依赖注入)是Dependency Injection的缩写,所以他们其实是为了解决同一问题。

Martin Fowler(马丁·福勒),国际著名的OO专家,认为我们需要为该模式指定一个更具体的名称。控制反转是一个过于笼统的术语,因此人们会感到困惑。与IoC倡导者进行了大量讨论之后,决定使用依赖注入这个名称。

依赖项注入有三种主要样式,分别是:构造函数注入、属性注入、接口注入

总结

是不是没我们想的那么复杂繁琐,简单来说:其实就是一种架构思想而引生出来的一个工具。目的就是为了解耦,使架构更稳定。

其他

其他相关具体实现原理和使用方式,我就不详细介绍了,大家可以查找相关资料学习。后面我会通过代码实现一个我们自己的IOC容器,并且嵌入到.NET Core框架,以便于大家对IOC更深层次的理解。大家可以关注我后续更新,由于是空余时间更新,所以更新时间比较慢。

我也给大家贴一下《控制反转容器和依赖注入模式》文章地址:

  1. 原文章地址:http://martinfowler.com/articles/injection.html
  2. 中文翻译地址:https://files.cnblogs.com/files/stono/DependencyInjection.pdf

以简御繁介绍IOC的更多相关文章

  1. 以简御繁——介绍IOC

    1.IOC的理论背景 大家开发理念,一直都是奔着架构稳定.低耦合性.而IOC初衷,就是为了解决模块依赖问题,理解<六大设计原则(SOLID)> 如图所示,在我们开发中,业务的实现,就是靠着 ...

  2. java简单例子介绍IOC和AOP

    IOC和AOP的一些基本概念 介绍 IOC 一.什么是IOC IoC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内 ...

  3. Spring入门介绍-IOC(二)

    浅谈IOC IOC(inversion of control)是Spring的核心,贯穿始终.所谓IOC 就是有Spring来控制对象的生命周期和对象间的关系. 传统开发模式:对象之间相互依赖 IOC ...

  4. Spring IoC介绍与Bean的使用

    1. 介绍 IoC   IoC-Inversion of Control,即"控制反转",它不是什么技术,而是一种设计思想.在 Java 开发中, IoC意味着将设计好的对象交给容 ...

  5. IOC和DI的概念,以及Spring框架的介绍

    对于Java开发者来说,Spring肯定是一个避不开的技术.所以准备系统的学下Spring框架. 我给自己设计的学习路线是这样的:首先阅读下Spring的官方文档(注意Spring官网上有很多项目,S ...

  6. Spring IoC源码解析——Bean的创建和初始化

    Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...

  7. 通过中看不中用的代码分析Ioc容器,依赖注入....

    /** * 通过生产拥有超能力的超人实例 来理解IOC容器 */ //超能力模组接口 interface SuperModuleInterface{ public function activate( ...

  8. 控制反转IoC简介

    控制反转IoC简介 在实际的应用开发中,我们需要尽量避免和降低对象间的依赖关系,即降低耦合度.通常的业务对象之间都是互相依赖的,业务对象与业务对象.业务对象与持久层.业务对象与各种资源之间都存在这样或 ...

  9. Unity(一)介绍与基本使用

    一.IOC介绍 IOC(Inversion of Control),中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection) IOC的基本概念是:不创建对象,但是描述创 ...

随机推荐

  1. 大数据学习day28-----hive03------1. null值处理,子串,拼接,类型转换 2.行转列,列转行 3. 窗口函数(over,lead,lag等函数) 4.rank(行号函数)5. json解析函数 6.jdbc连接hive,企业级调优

    1. null值处理,子串,拼接,类型转换 (1) 空字段赋值(null值处理) 当表中的某个字段为null时,比如奖金,当你要统计一个人的总工资时,字段为null的值就无法处理,这个时候就可以使用N ...

  2. Linux学习 - 变量测试与内容替换

    变量置换方式 变量y没有设置 变量y为空 变量y有值 x=${y-新值} x=新值 x空 x=$y x=${y:-新值} x=新值 x=新值 x=$y x=${y+新值} x空 x=新值 x=新值 x ...

  3. 格式化代码(Eclipse 格式化代码块快捷键:Ctrl+Shift+F)

    1.格式化java代码 : ①Ctrl+Shift+F 但是我们会遇到按 Ctrl+Shift+F不起作用的时候?       Ctrl+Shift+F 在搜狗拼音里是简繁替换.一旦安装搜狗拼音这个快 ...

  4. spring boot集成swagger文档

    pom <!-- swagger --> <dependency> <groupId>io.springfox</groupId> <artifa ...

  5. clickhouse客户端使用

    测试初始化 clickhouse-client -m create database if not exists test; use test; drop table test; create tab ...

  6. mysql 报 'Host ‘XXXXXX’ is blocked because of many connection errors'

    1. 问题:服务启动时,日志报错,导致启动失败: Caused by: com.mysql.cj.exceptions.CJException: null,  message from server: ...

  7. [源码解析] PyTorch分布式优化器(3)---- 模型并行

    [源码解析] PyTorch分布式优化器(3)---- 模型并行 目录 [源码解析] PyTorch分布式优化器(3)---- 模型并行 0x00 摘要 0x01 前文回顾 0x02 单机模型 2.1 ...

  8. MySQL记录锁、间隙锁、临键锁小案例演示

    生成间隙(gap)锁.临键(next-key)锁的前提条件 是在 RR 隔离级别下. 有关Mysql记录锁.间隙(gap)锁.临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文 ...

  9. git 基本命令及idea集成使用

    目录 git基本命令使用 设置签名 gitHub 服务配置秘钥 上传代码 更新代码 分支管理 bat脚本更新 idea集成git git基本命令使用 设置签名 签名和秘钥大多数是一起设置的,设置后一般 ...

  10. Signature Pad 使用

    实现功能 能够在移动设备上实现电子签名,并保存为图片 git地址 https://github.com/szimek/signature_pad 参数说明 dotSize:点的大小(在屏幕上点击留下的 ...