PID&IOC&DI学习及实战-系统学习七

简介: 之前一直对于spring核心的IOC以及相关的PID、DI概念混乱,终于在有了设计模式主要是工厂模式的前提下把这几个概念搞明白了

一、背景介绍


之前一直对于spring核心的IOC以及相关的PID、DI概念混乱,终于在有了设计模式主要是工厂模式的前提下把这几个概念搞明白了


阅读这篇文章您会了解到小编在进行PID&IOC&DI学习及实战过程中的思路、总结以及产生的问题,希望能够和读者碰撞出更多的"车祸"。


二、学习思路


1.查询概念解释

2.宏观对比

3.示例需求

4.示例实现

5.spring实现思路


三、学习过程


1.查询概念解释


1.1.依赖:依靠别人或事物而不能自立或自给称为依赖

1.2.倒置:倒置的基本意思是颠倒位置、次序或关系的意思,在植物中指的是某一器官变成与原来的位置和方向相反的状态


1.3.控制:指为了确保组织内各项计划按规定去完成而进行的监督和纠偏的过程

1.4.反转:指转向相反的方向;照片图像的色调或明暗的处理


1.5.注入:1.泵入、灌入或流入。2.以气息传送。3.使产生对某物的印象或得到逐渐灌输。


1.6.控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。


2.宏观对比


20210613170141165.png


3.示例需求


3.1.您刚接手一个项目,这个项目经过了无数人之手有着10年之久的历史,其中的类有成千上万;用户提出了一个需求,在实现过程中您需要运用中间的某一个类的实例。


假设我们没有spring的ioc工厂,那么您就需要将该类及以下的所有的类之间的关系都梳理明白,这将是一个多么巨大且高风险的任务?


有了spring的ioc工厂,我们的工作又会变成什么样子呢?


3.2.我们将上面的大需求用制造汽车的例子来理解:

3.2.1.传统的汽车设计;先设计一个轮胎——>再根据轮胎设计轮毂——>再根据轮毂设计车架——>最终根据车架设计出来汽车

3.2.1.1.此时客户提出要将轮胎的大小调大一号,调完了轮胎,由于轮毂依赖轮胎轮毂也得调整,由于车架依赖轮毂车架也得调整,由于汽车依赖于车架汽车也得调整

3.2.2.依赖倒置思想下汽车设计:先设计汽车——>根据汽车设计车架——>根据车架设计轮毂——>根据轮毂设计轮胎

3.2.2.1.此时客户提出要将轮胎的大小调大一号,我们只需要将轮胎的型号做调整即可


4.示例实现(为了宏观效果更加明确下面的示例都是以图的方式进行的展示)


4.1.传统的汽车设计


20210613170516450.png

2021061317074218.png


4.2.依赖倒置思想下汽车设计


20210613170637212.png


20210613170811354.png


5.spring实现思路


下面是spring的IOC工厂做的事情,具体源码的实现会在后续的博文中做详细总结


20210613170832586.png

20210613171041797.png


四、学习总结


收获:

1.对于PID&IOC&DI有了更加深入的理解

2.对于知识的层层递进(UML->设计模式->框架学习)学习有了更加明确的方式方法提出的问题:

1.spring的IOC都遵循了哪些设计原则?具体源码中是如何体现的?

2.spring的IOC都运用了那些设计模式?具体源码中是如何体现的?

3.spring中其它模块和IOC的关系是什么?


五、升华


打破认知的边界、突破思维的局限,原来编程中有这么多优秀的理论思想及实现内容;并且坚信它们之前有着强有力的逻辑关系;更加坚信我可以攻陷这一座座城池。


参考文章:Spring IoC有什么好处呢?UML的六种关系-系统学习四简单工厂VS工厂方法&手写自动化工厂——系统学习六

相关文章
|
Java 应用服务中间件 持续交付
SpringBoot采用Java配置类的方式配置Nacos,动态注册微服务IP
本文是采用Java配置类的方式配置微服务的Nacos服务注册,并动态的配置spring.cloud.discovery.ip属性以打到微服务内网穿透注册至Nacos注册中心。
5303 0
SpringBoot采用Java配置类的方式配置Nacos,动态注册微服务IP
|
算法 搜索推荐
用N-S流程图表示算法
用N-S流程图表示算法
865 1
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
631 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
负载均衡 jenkins 应用服务中间件
大规模部署下的 Jenkins 高可用性与负载均衡
【8月更文第31天】随着软件开发流程的加速,持续集成/持续交付(CI/CD)工具的重要性日益凸显。Jenkins 作为最受欢迎的 CI/CD 平台之一,为企业提供了强大的自动化构建和部署功能。然而,在大规模部署场景下,单一的 Jenkins 实例可能无法满足高可用性和性能的需求。本文将探讨如何设计和实施 Jenkins 高可用集群,以支持大型组织的需求,并通过负载均衡技术来提高系统的稳定性和响应速度。
863 0
|
数据可视化 uml
UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
UML图讲解,关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系。
6266 0
UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
|
存储 JSON 前端开发
【工作中问题解决实践 十二】使用@JsonTypeInfo实现请求数据对象多态
【工作中问题解决实践 十二】使用@JsonTypeInfo实现请求数据对象多态
831 1
|
存储 前端开发 Java
Java 代码执行的原理解读
Java 代码执行的原理解读
213 0
|
算法
N-S图详解
N-S图详解
1482 0
|
Java 测试技术 容器
一篇文章解释清楚IOC和DI
一篇文章解释清楚IOC和DI