一、背景介绍
之前一直对于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.宏观对比
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.传统的汽车设计
4.2.依赖倒置思想下汽车设计
5.spring实现思路
下面是spring的IOC工厂做的事情,具体源码的实现会在后续的博文中做详细总结
四、学习总结
收获:
1.对于PID&IOC&DI有了更加深入的理解
2.对于知识的层层递进(UML->设计模式->框架学习)学习有了更加明确的方式方法提出的问题:
1.spring的IOC都遵循了哪些设计原则?具体源码中是如何体现的?
2.spring的IOC都运用了那些设计模式?具体源码中是如何体现的?
3.spring中其它模块和IOC的关系是什么?
五、升华
打破认知的边界、突破思维的局限,原来编程中有这么多优秀的理论思想及实现内容;并且坚信它们之前有着强有力的逻辑关系;更加坚信我可以攻陷这一座座城池。
参考文章:Spring IoC有什么好处呢? 、UML的六种关系-系统学习四、简单工厂VS工厂方法&手写自动化工厂——系统学习六