网站首页 > 技术文章 正文
弄清楚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应用上下文,作为容器的高级形态而存在,增加了许多面向框架的特性。
希望我的分享可以帮助到你,如果你在内容技术上遇到难题,可以+关注■@主引教程 ,反馈给我们。我们会及时回复,如果有那些内容有误可以直接提出来,我们会及时纠正,谢谢来访。
猜你喜欢
- 2024-10-15 BATJ面试必会之 Spring 篇(30题) 面试spring的面试题
- 2024-10-15 Spring知识点提炼 spring题
- 2024-10-15 springmvc的核心是啥,请求的流程怎么处理,控制反转怎么实现
- 2024-10-15 spring源码分析——spring大纲 spring源码分析和总结简书
- 2024-10-15 Spring思维导图,让Spring不再难懂(ioc篇)
- 2024-10-15 Spring框架介绍及使用 spring框架的使用步骤
- 2024-10-15 架构师必知必会:Java内置的控制反转机制-Service Provider
- 2024-10-15 轻松理解 Spirng IoC/控制方向反转
- 2024-10-15 什么是控制反转(ioc),通过解释总结告诉你
- 2024-10-15 搞透IOC,Spring IOC看这篇就够了
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)