Ioc——控制反转

简介: Ioc——控制反转

前言

IoC(Inversion of Control) ,即 “控制反转”IoC 主要是针对对象实例化这个方面。在开发中, IoC 意味着设计好的对象交给容器去控制,而不是使用传统的 new 方式,在对象内部直接控制。首先看一下传统的方式:


传统实例化方式(代码为typescript)

拿网上最常用的造汽车来举例。一辆小汽车通常由 发动机底盘车身电气设备 四大部分组成。四大部分组成。汽车电气设备的内部构造很复杂,简单起见,我们只考虑三个部分: 发动机底盘车身


UML类图 如下所示:

微信截图_20221207191748.png


接下来开始构建项目,由于构建篇幅过长,拆分到另一篇笔记


通过执行命令 npx ts-node main.ts 发现输出了 引擎发动了 结果,这正是我们想要的,运行成功!


虽然代码正常运行了,但是从设计的角度来看却存在一下两个问题:

  1. 在造车的时候不能选择配置,我想要v8引擎,是不能实现的,只能用默认的引擎。
  2. 在汽车类内部,需要在构造函数中手动一个一个的new组件出来。


为了解决第一个问题,我们在构造函数中通过传参的方式来创建组件,由于篇幅限制,拆分到另一篇笔记


之后通过执行命令 npx ts-node main.ts 发现输出了 引擎发动了 结果,证明我们的修改没问题,并且解决了 问题1


问题2 引出的解决方案就是 IoC (控制反转)了。


IoC是什么

IoC 的定义已经在前言中说明了,理解 IoC 思想的关键在于:谁控制谁,控制什么,为何是反转,哪些方面反转了


  • 谁控制谁

在传统程序设计中,我们直接在对象内部通过 new 的方式创建对象,是程序主动创建依赖对象

IoC 是有专门一个 容器 来创建这些对象,即由IoC容器控制对象的创建


  • 控制什么

主要是控制**外部资源(依赖对象)**的获取。


  • 为何是反转

反转 就有 正转 ,传统应用程序是由我们自己在程序中主动控制去获取依赖对象,这叫 正转


反转 则是由容器来帮忙创建及注入依赖对象


所以,在 IoC 的思想中,由于容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是 反转 了。


  • 那些方面反转了

显而易见,依赖对象的获取被反转了


IoC能做什么

IoC不是一种技术,只是一种思想,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度


传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了 IoC 容器后,把创建和查找依赖对象的控制权交给了容器,由容器注入组合对象,所以对象之间是松散耦合。 这样也便于测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。


其实 IoC 对编程带来的最大改变不是从代码上,而是思想上,发生了 “主从换位” 的变化。应用程序本来是老大,要获取什么资源都是主动出击,但在 IoC 思想中,应用程序就变成被动了,被动的等待 IoC 容器来创建并注入它所需的资源了。


IoC与DI之间的关系

对于控制反转来说,其中最常见的方式叫做 依赖注入 ,简称为 DIDependency Injection)。


所以:IoC是思想,DI是具体实现。关于 DI 的详细介绍,参见笔记

目录
相关文章
|
3月前
|
设计模式 Java 容器
控制反转 (IoC)
【8月更文挑战第24天】
40 0
|
3月前
|
设计模式 测试技术 容器
依赖注入与控制反转:理解与应用
【8月更文挑战第22天】
121 0
|
XML 开发框架 Java
Spring框架IoC控制反转
Spring是与2003年兴起的一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IOC)和面向切面编程(AOP)。Spring是可以在Java SE/EE中使用的轻量级开源框架。 Spring的主要作用就是为代码"解耦",降低代码间的耦合度。就是让对象和对象(模板和模板)之间关系不是使用代码关联,而是通过配置来说明。即在Spring中说明对象(模块)的关系。 Spring根据代码的功能特点,使用IOC降低业务对象之间耦合度。IOC使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了,而是由Spring容器统一
81 2
|
程序员 容器
控制反转与依赖注入
控制反转与依赖注入
128 0
控制反转与依赖注入
|
Java API C++
IOC理解
成功就是简单道理的深刻理解与灵活运用 前不久,阿里大牛虾总在群里抛出一个问题:“从深层次讲解一下如何理解IOC,IOC和DI是一回事吗?” 这个问题真是让人平静而又不平静 平静源于此问题就像问中国人怎么使用筷子,天天使用筷子,难道还不会使用筷子? 但又不平静,你能写出一份详细的说明书,让一个不会使用筷子的人按此说明成功地使用上筷子吗?
351 0
IOC理解
|
Oracle 架构师 Java
什么是IOC
什么是IOC
261 0
什么是IOC
|
自动驾驶 小程序 Java
什么是控制反转(IOC)?什么是依赖注入?
什么是控制反转(IOC)?什么是依赖注入?
什么是控制反转(IOC)?什么是依赖注入?
|
XML 存储 Java
|
Java Spring
Ioc个人理解
IOC根据官方给的意思是依赖注入,说白了,调用类的方面不用"new 类名",而是在配置文件中配置后,然后新建一个工厂类,这样在工厂类中就可以直接调用了。下面是实现IOC的过程。
144 0
Ioc个人理解
|
Java Spring 数据格式
我对控制反转以及依赖注入的认识
IOC诞生的历史 在没有IoC时,关联不同模块是通过类实例实现的,代码可能是这样子的: // 代码清单1 public interface YourService { void func1(); void func2(); } // 代码清单2 public class.
3426 0