美文网首页SpringBoot
IOC与DI在吃鸡中的应用

IOC与DI在吃鸡中的应用

作者: 夏目无痕 | 来源:发表于2020-03-20 20:50 被阅读0次

IOC:Inversion of Control,即“控制反转”

DI:Dependency Injection,即“依赖注入”

参考文档:

    | 马丁老爷子的解释

原始吃鸡流程

假如自己是个吃鸡队员,要上线打仗,本来什么都没有,所以就自己去寻找武器,弹药,医疗箱,食物等,这些依赖品都需要我们自己来一一去寻找并和他们进行组合,也就是所谓的我们只有依赖于这些对象,控制这些对象,和他们进行组合之后才能达到我们吃鸡的目的,于是N多个吃鸡队员都要去寻找自己的依赖对象来达到不同的目的。

改良后的吃鸡流程

后面陆战队的领导成立了后勤部门,部门名字为IOC容器,后勤部门说了,我这边什么都有,你们不要自己去找资源了,想要啥问我要,于是吃鸡队员就按照自己不同的依赖需求直接伸手去拿,并且拿来即用,再也不用费劲儿去找了。

改良前后对比分析

改良之后,吃鸡队员动手拿资源的过程,并不是自己主动去拿,而是后勤部门(IOC容器)会在你执行作战任务的时候(程序运行时)动态的识别你需要什么并送到你手上(依赖注入-DI),关于依赖注入是有两种方式的,一种是你想要什么就问后勤部门要什么,另外一个就是被动的让后勤部门给你发放,也就是所谓的主动注入和被动注入。

那么,现在对象获取的控制权不在你的手上,而是在后勤部门手上(IOC容器),也就是所谓的控制反转(IOC),但是后勤部门本身也有发错装备的时候,那么吃鸡队员就会打call给后勤部门投诉(程序启动的时候报错)。

为什么要成立后勤部门

之前每个吃鸡队员要去寻找装备,费时费力,并且资源浪费。

    费时费力: 每次都要去自己找资源,可能会引起资源冲突,比如张三和李四花了一个小时都去找资源发现了同一个沙漠之鹰,但是只能一个人拿去用。

    资源浪费:张三手上有个AK47,但是一直不用,李四手上只有一个木棍,AK47找了一天都没找到,后来被KO了~😂。

成立后勤部门后统一调配资源,省时省力,实现了资源优化配置。

    省时省力: 不用跑腿,不用去捡装备,在合适的时间后勤部会给你合适的装备。

        关于“合适的时间”:默认情况下,在程序编译时,准确的说是在SpringBoot启动时,IOC容器会自动创建对象,并且注入到我们的代码片段里;但是我们可以更改默认机制,来延迟实例化:就是在使用方和被使用方都加上@Lazy注解。

    资源优化配置

        张三手上有个AK47,但是一直不用这种情况不存在了,因为只有张三使用的时候才会发给他,不用的时候就进行回收(对象的创建,回收,分配,再利用)从而提高资源的复用率。 一个对象创建/回收的典型例子就是@Conditional条件注解,比如AK47他的损坏程度达到了60%, 那么可以通过条件注解来决定当损坏率达到60%的时候不让AK47进入后勤部门待发放仓库中(IOC容器);另外也可以通过优先级注解@Primary来决定,当有AK47,AK48等等的时候,如果AK47这个Bean被打上了@Primary注解,那么就会优先被放置到IOC容器。注意,这里的条件注解和优先级注解是针对放入容器的,而不是容器注入,所以注解是使用在AK47这个被放入容器的Bean的位置。那么对于李四来说,就不会拿到一个不能用的AK47了,而且可以根据优先级设定来拿到相对更好用的武器装备。

    =>在这里我们的关注点是AK47这个类,当你想换个装备或者在某个前提条件下替换装备时(当某个类的需求发生变化的时候)我们可以分别通过@Primary和@Conditional来进行对应的处理。

    当张三想替换所有的装备,枪,头盔,鞋子,医疗箱,坦克,大炮,飞机等等,也就是涉及到大量的装备的自动装配问题,我们需要灵活的替换所有这些装备,那就需要SPI的机制进行处理。SPI全称:Service Provider Interface,基于Interface + 策略模式+ 配置文件, Interface和策略模式解决了张三/李四的枪的问题,但是没有解决其他装备的问题,那么通过配置文件就可以灵活的进行装备的批量装配问题(将配置批量导入到IOC容器以及注入的问题),关于这个问题请参考:自动装配

最后祝大家吃鸡愉快~


相关文章

  • IOC与DI在吃鸡中的应用

    IOC:Inversion of Control,即“控制反转” DI:Dependency Injection,...

  • DependencyInjection Microsoft.Un

    IoC与DI的概念 IoC的全称为Inversion of Control(控制反转),DI的全称为Depende...

  • Q&A-05 Spring

    1、 IoC 和 DI 依赖注入 DI 是从应用程序的角度在描述:应用程序依赖容器创建并注入它所需要的外部资源; ...

  • 手写Spring核心功能第一篇:IOC(DI)

    说明 ​ Spring核心功能基本可以划分为两个,即IOC(DI)与AOP。IOC与DI本质上是在不同角度对同...

  • spring学习文档

    Spring ---轻量级的DI/IOC与AOP的容器框架~ DI(依赖注入)/IOC(控制反转) 导包 【spr...

  • Spring之IOC与DI

    IOC与DI 运行以上代码时,发生以下错误: DI

  • Spring源码阅读(一)——浅析ApplicationCont

    一、IOC与DI 很多人学习Spring框架都是从IOC入手的, IOC(Inversion of Control...

  • IoC与DI

    依赖: spring 把相互协作的关系称为依赖关系。假如A组件调用了B组件的方法,可以称A组件依赖于B 依赖注入 ...

  • Spring IOC容器简介

    前言 Spring的核心是一个IOC(控制反转)容器,IOC的含义与DI(依赖注入)等同,但是DI显然更好理解,也...

  • Spring之IOC容器

    IoC与DI 首先想说说IoC(Inversion of Control,控制倒转)。 这是spring的核心,贯...

网友评论

    本文标题:IOC与DI在吃鸡中的应用

    本文链接:https://www.haomeiwen.com/subject/slxbdxtx.html