计算机系统应用教程网站

网站首页 > 技术文章 正文

弄清楚Spring的Ioc(控制反转)和DI(依赖注入)

btikc 2024-10-15 09:03:25 技术文章 9 ℃ 0 评论

弄清楚Spring的Ioc(控制反转)和DI(依赖注入)

开头先理解清楚Ioc(控制反转)和DI(依赖注入),这个是看本文的重点


Ioc目的是解耦

耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。

如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。

为了解决对象之间的耦合度过高的问题,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的"解耦",Spring是很好实现IOC框架产品。


Ioc(控制反转)

名称由来: 软件开发在使用IOC容器之前,假如对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。

无论是创建还是使用对象B,控制权都在自己手上。

软件开发在使用IOC容器之后,这种情况就完全改变了,由于IOC容器的加入,对象A与对象B之间失去直接联系。

所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。

通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为被动行为,控制权颠倒过来,这就是"控制反转"这个名称的由来。


DI(依赖注入)

名称由来: 2004年,Martin Fowler探讨IOC和DI的问题,既然IOC是控制反转,那么到底是"哪些方面的控制被反转了呢?"。

经过详细地分析,他得出答案:"获得依赖对象的过程被反转"。控制被反转之后,获得依赖对象的过程由自身管理变为由IOC容器管理主动注入。

给"控制反转"取一个更合适的名字叫做"依赖注入(Dependency Injection)"。实际上给出实现IOC的方法是:注入。

所谓依赖注入,就是由IOC容器在运行期间,动态地将对象某种依赖关系注入到对象之中。


以滴滴平台例子解释

以滴滴平台为例子:我作为打车端的会员,司机作为司机端的会员司机。

我有坐车的需求,告诉滴滴平台我什么时间点需要什么样子的车,滴滴平台召集司机端的司机,根据我需要的要求分配一辆车给我。 这样子就很好解释Ioc,滴滴平台做为Ioc,我和司机就是Ioc的对象或bean。


Spring的IoC容器

在实现控制反转和依赖注入的过程中:

  • 容器启动阶段:加载配置文件和解析配置文件。
  • Bean实例化阶段: Bean 的实例化、 Bean 的初始化和Bean 的销毁。

Spring中提供两种IoC容器:

  • BeanFactory:基础类型IoC容器,提供完整的IoC服务支持;
  • ApplicationContext: ApplicationContext应用上下文,作为容器的高级形态而存在,增加了许多面向框架的特性。

希望我的分享可以帮助到你,如果你在内容技术上遇到难题,可以+关注■@主引教程 ,反馈给我们。我们会及时回复,如果有那些内容有误可以直接提出来,我们会及时纠正,谢谢来访。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表