以简御繁——介绍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的基本概念是:不创建对象,但是描述创 ...
随机推荐
- keybd_event模拟键盘按键,mouse_event怎么用
从 模仿UP主,用Python实现一个弹幕控制的直播间! - 蛮三刀酱 - 博客园 (cnblogs.com) 知道了 PyAutoGUI: * Moving the mouse and clicki ...
- json模块中函数的用法
json模块中主要使用四个函数:json.load(),json.dump(),json.loads(),json.dumps() json.loads()是将一个json编码的字符串转换成pytho ...
- Bitmaps与优化
1.有效的处理较大的位图 图像有各种不同的形状和大小.在许多情况下,它们往往比一个典型应用程序的用户界面(UI)所需要的资源更大. 读取一个位图的尺寸和类型: 为了从多种资源来创建一个位图,Bitma ...
- JConsole可视化工具
JConsole基本介绍 Jconsole (Java Monitoring and Management Console),一种基于JMX的可视化监视.管理工具.JConsole 基本包括以下基本功 ...
- 【编程思想】【设计模式】【行为模式Behavioral】策略模式strategy
Python版 转自https://github.com/faif/python-patterns/blob/master/behavioral/strategy.py #!/usr/bin/env ...
- Spring boot 配置文件默认放置位置,和加载优先级
一 .默认配置文件目录 spring boot 启动会扫描以下位置的application.properties 或者application.yml文件作为spring boot 的默认配置文件 ,加 ...
- ActiveMQ(一)——简介
一.ActiveMQ简介 ActiveMQ是什么ActiveMQ是Apache推出的,一款开源的,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现的消中间件(MOM) Activ ...
- 【力扣】973. 最接近原点的 K 个点
我们有一个由平面上的点组成的列表 points.需要从中找出 K 个距离原点 (0, 0) 最近的点. (这里,平面上两点之间的距离是欧几里德距离.) 你可以按任何顺序返回答案.除了点坐标的顺序之外, ...
- 背包问题-C语言实现
转自:http://blog.csdn.net/tjyyyangyi/article/details/7929665 0-1背包问题 参考: http://blog.csdn.net/liwenjia ...
- 用法总结:NSArray,NSSet,NSDictionary
用法总结:NSArray,NSSet,NSDictionary Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序 ...