以简御繁——介绍IOC
1.IOC的理论背景
大家开发理念,一直都是奔着架构稳定、低耦合性。而IOC初衷,就是为了解决模块依赖问题,理解《六大设计原则(SOLID)》
如图所示,在我们开发中,业务的实现,就是靠着模块中的类与类、跨模块的类与类,相互调用与依赖完成的。而这就导致我们改动一个类,就会使得所有用到这个类的地方都要改一遍。比如把My SQL更换成SQL Server,我们不应该影响业务代码,只需要更改数据驱动的实现就行(我相信大家遇见过这种烦人的事情)
而这个时候我们就想,可不可以不由我们自己实例化,而是交给一个专门的工厂帮我们实例化(IOC的前身其实就是工厂)为了解决这个问题,软件专家Michael Mattson提出了IOC理论
2.什么是IOC
IOC(控制反转)是Inversion of Control的缩写,IOC理念就是为了解决背景交代的问题,是一种设计思想,可以认为是一种全新的设计模式,我们具体刨析一下控制反转设计思想:
- 控制:首先控制实例的创建,不用编程的时候去控制具体创建什么实例,而是交给工厂,他是第三方的概念,他和我们业务没任何关系,我们面向抽象编程,由它帮我们统一控制实例创建,改变它,就所有的统一改变!(完美)
- 反转:其次对象之间依赖不能由我们去创建,我们调用的时候,不用关心被调用的类与其他类之间的依赖创建,也交给第三方去帮我们解决依赖的问题,我们只管调用。(更完美)
而IOC容器(第三方)就是为了这两个设计理念而诞生的,我们只需要把实例映射关系注册到IOC容器中,实例的创建由容器统一构建,如上图所示。
但产生了另一个问题,既然调用者不关心我的依赖,那我依赖的对象怎么来,难道凭空产生?于是就有了注入这种模式。
3.什么是DI
DI(依赖注入)是Dependency Injection的缩写,所以他们其实是为了解决同一问题。
Martin Fowler(马丁·福勒),国际著名的OO专家,认为我们需要为该模式指定一个更具体的名称。控制反转是一个过于笼统的术语,因此人们会感到困惑。与IoC倡导者进行了大量讨论之后,决定使用依赖注入这个名称。
依赖项注入有三种主要样式,分别是:构造函数注入、属性注入、接口注入
总结
是不是没我们想的那么复杂繁琐,简单来说:其实就是一种架构思想而引生出来的一个工具。目的就是为了解耦,使架构更稳定。
其他
其他相关具体实现原理和使用方式,我就不详细介绍了,大家可以查找相关资料学习。后面我会通过代码实现一个我们自己的IOC容器,并且嵌入到.NET Core框架,以便于大家对IOC更深层次的理解。大家可以关注我后续更新,由于是空余时间更新,所以更新时间比较慢。
我也给大家贴一下《控制反转容器和依赖注入模式》文章地址:
- 原文章地址:http://martinfowler.com/articles/injection.html
- 中文翻译地址:https://files.cnblogs.com/files/stono/DependencyInjection.pdf
以简御繁——介绍IOC的更多相关文章
- 以简御繁介绍IOC
1.IOC的理论背景 大家开发理念,一直都是奔着架构稳定.低耦合性.而IOC初衷,就是为了解决模块依赖问题,理解<六大设计原则(SOLID)> 如图所示,在我们开发中,业务的实现,就是靠着 ...
- java简单例子介绍IOC和AOP
IOC和AOP的一些基本概念 介绍 IOC 一.什么是IOC IoC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内 ...
- Spring入门介绍-IOC(二)
浅谈IOC IOC(inversion of control)是Spring的核心,贯穿始终.所谓IOC 就是有Spring来控制对象的生命周期和对象间的关系. 传统开发模式:对象之间相互依赖 IOC ...
- Spring IoC介绍与Bean的使用
1. 介绍 IoC IoC-Inversion of Control,即"控制反转",它不是什么技术,而是一种设计思想.在 Java 开发中, IoC意味着将设计好的对象交给容 ...
- IOC和DI的概念,以及Spring框架的介绍
对于Java开发者来说,Spring肯定是一个避不开的技术.所以准备系统的学下Spring框架. 我给自己设计的学习路线是这样的:首先阅读下Spring的官方文档(注意Spring官网上有很多项目,S ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
- 通过中看不中用的代码分析Ioc容器,依赖注入....
/** * 通过生产拥有超能力的超人实例 来理解IOC容器 */ //超能力模组接口 interface SuperModuleInterface{ public function activate( ...
- 控制反转IoC简介
控制反转IoC简介 在实际的应用开发中,我们需要尽量避免和降低对象间的依赖关系,即降低耦合度.通常的业务对象之间都是互相依赖的,业务对象与业务对象.业务对象与持久层.业务对象与各种资源之间都存在这样或 ...
- Unity(一)介绍与基本使用
一.IOC介绍 IOC(Inversion of Control),中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection) IOC的基本概念是:不创建对象,但是描述创 ...
随机推荐
- A Child's History of England.36
CHAPTER 11 ENGLAND UNDER MATILDA AND STEPHEN The King was no sooner dead than all the plans and sche ...
- R语言学习记录(一)
(R基础) 对象:什么是对象呢,其实就是一个名称而已,在R中存储的数据 就是一个R对象 a <- 1 ###其中'<-'表示的是一个赋值符号 这句话表示的是,将1赋值给a b <- ...
- Scala【需求二:求各省市的各个指标】
需求处理步骤 原始数据->json->过滤->列裁剪 需求二:求各省市的各个指标 原始数据 文本pmt.json,每一行都是一个json字符串.里面包含ip等信息 {"se ...
- Hive(十一)【压缩、存储】
目录 一.Hadoop的压缩配置 1.MR支持的压缩编码 2.压缩参数配置 3.开启Mapper输出阶段压缩 4.开启Reduceer输出阶段 二.文件存储 1.列式存储和行式存储 2.TextFil ...
- AI常用环境安装
torch环境 conda create --name py37 python=3.7 conda activate py37 pip install jieba==0.42.1pip install ...
- Android: EditText设置属性和设置输入规则
1.EditText输入限制规则 在xml:EditText 设置属性 android:digits="ABCDE123&*" ABCDE123&*是你的限制规则 ...
- 【Linux】【Commands】systemd
1. 系统启动流程:POST --> Boot Sequeue(BIOS) --> Bootloader(MBR) --> Kernel(ramdisk) --> rootfs ...
- Socket通信和多线程的总结
1.ServerSocket进行多线程接收 package com.yh.chat; import java.io.IOException; import java.net.ServerSocket; ...
- XML解析器
1.非验证解析器 检查文档格式是否良好,如用浏览器打开XML文档时,浏览器会进行检查,即格式是否符合XML(可拓展标记语言)基本概念. 2.验证解析器 使用DTD(Document Type Defi ...
- 如何用Serverless让SaaS获得更灵活的租户隔离和更优的资源开销
关于SaaS和Serverless,相信关注我的很多读者都已经不陌生,所以这篇不会聊它们的技术细节,而将重点放在SaaS软件架构中引入Serverless之后,能给我们的SaaS软件带来多大的收益. ...