(自我理解)Spring IOC容器详解和控制反转模式理解概述

2023-05-16

文章目录

  • 依赖反转原则
  • 依赖注入
  • 依赖控制反转的实现方式
    • 现象
    • 注意点
  • IOC
    • 本质分析

依赖反转原则

🌐在面向对象编程领域中,依赖反转原则(Dependency inversion principle,DIP)是指一种特定的解耦(传统的依赖关系创建在高层次上,而具体的策略设置则应用在低层次的模块上)形式,使得高层次的模块不依赖于低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象。

(有点绕啊说实在话👺)

依赖注入

🌐当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。(控制反转也就是依赖注入,早在2004年,Martin Flowler就提出“哪些方面的控制被反转?”这个问题,并且得出依赖对象的获得被反转。基于此结论,为控制反转创造了一个更好的名字:“依赖注入”)

依赖控制反转的实现方式

方式的话有很多种,在Spring中IOC容器是实现这个模式的载体,它可以在对象生成或者初始化时直接将数据注入到对象中,也可以通过对象的引用注入到对象的数据域中的方式来注入对方法调用的依赖。
关于如何反转对依赖的控制,把控制权从具体的业务对象手中转交到平台或者框架中,是解决面向对象系统设计复杂性和提高面向对象系统可测试性的一个有效的解决方案。

现象

如果合作对象的引用或者依赖关系的管理要由具体的对象来完成,那么就会导致代码的高度耦合和可测试性降低,这对复杂的面向对象系统是非常不利的!

注意点

  • 对象的获得进行了“反转”
  • 核心原理:依赖注入是组件之间依赖关系由容器在运行期间决定,即由容器动态地将某个依赖关系注入到组件中
  • 依赖注入的目的:为了“解耦”,提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。
  • 通过依赖注入机制,我们只需要通过简单的配置,而无须任何代码就可以指定目标需要的资源,完成自身的业务逻辑,不需要关心具体的资源来自何处、由谁实现。
  • 控制反转是一个关于一个对象如何获取它所依赖的对象的引用,这里的反转主要是指责任的反转

IOC

IOC也称为“依赖倒置原理”(Dependency inversion principle),几乎所有的框架都是用了倒置注入(Martin Flower)技巧,同时这也是IOC原理的一项应用。控制反转也是Spring框架的核心。

本质分析

IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制,对象之间的相互依赖关系由IOC容器进行管理,并由容器完成对象的注入。
理解关键“谁控制谁,控制什么,为何是反转(想想有反转就会有正转),哪些方面被反转了”

1、谁控制谁
以往我们是要使用一个对象时是主动的new对象,但是在IOC中有一个专门的容器来控制对象,即现在是由IOC容器来控制对象的创建。

2、控制什么
主要控制了外部资源获取(不只是对象,还有文件啊之类的)

3、反转了什么?哪些被反转了?
首先讲一下有反转就会有正转,正转就是指我们通过new主动获取依赖对象;反转则是由容器来创建及注入依赖对象

4、主动和被动
上面说过正转就是指我们通过new主动获取依赖对象,而在IOC这边,就变成了对象只能够被动的接受依赖对象,所以叫做反转

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(自我理解)Spring IOC容器详解和控制反转模式理解概述 的相关文章

随机推荐