网站首页 > 技术文章 正文
每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。
放弃不难,但坚持很酷~
在 Java 开发面试中,经常会被问到 Spring IOC 是什么,让谈谈自己的理解。在工作开发中,如果能够理解 Spring IOC 设计模式的话,对排查疑难问题也是很有帮助的。今天这篇文章就先通俗易懂地介绍一下 Spring IOC 。
一、Spring IOC 和 DI
参考链接:https://zhuanlan.zhihu.com/p/49264919,在知乎上发现了这一篇好文,能比较通俗易懂地介绍 Spring IOC (控制反转)和DI(依赖注入)概念。我又将其整理成了自己的知识,方便自己理解和与别人交流。
1、IOC:Inversion Of Control,即控制反转,是一种设计思想。在传统的 Java SE 程序设计中,我们直接在对象内部通过 new 的方式来创建对象,是程序主动创建依赖对象;而在Spring程序设计中,IOC 是有专门的容器去控制对象。
所谓控制就是对象的创建、初始化、销毁。
创建对象:原来是 new 一个,现在是由 Spring 容器创建。
初始化对象:原来是对象自己通过构造器或者 setter 方法给依赖的对象赋值,现在是由 Spring 容器自动注入。
销毁对象:原来是直接给对象赋值 或做一些销毁操作,现在是 Spring 容器管理生命周期负责销毁对象。
总结:IOC 解决了繁琐的对象生命周期的操作,解耦了我们的代码。
所谓反转:
其实是反转的控制权,前面提到是由 Spring 来控制对象的生命周期,那么对象的控制就完全脱离了我们的控制,控制权交给了 Spring 。这个反转是指:我们由对象的控制者变成了 IOC 的被动控制者。
IOC 能做什么?
IOC 容器完美解决了耦合问题,甚至可以让互不相关的对象产生注入关系。
在 IOC 模式下,你只需要设计良好的流程和依赖,定义出需要什么,然后把控制权交给 Spring 即可。
2、DI:Dependency injection,即依赖注入。
依赖注入是一种实现,而 IOC 是一种设计思想。从 IOC 到 DI ,就是从理论到实践。程序把依赖交给容器,容器帮你管理依赖,这就是依赖注入的核心。
好处:依赖注入降低了开发的成本,提高了代码复用率、软件的灵活性。
谁依赖谁,为什么需要依赖;谁注入谁,注入了什么:
谁依赖谁:A对象 依赖于 IOC 容器。
为什么需要依赖:A对象需要 IOC 容器提供对象需要的数据、B对象 等外部资源,没有这些资源不能完成业务处理。
谁注入谁:IOC 容器注入 A对象。
注入了什么:IOC 容器将 A对象 需要的数据、B对象等外部资源按需注入给对象。
IOC 和DI 的关系:
是同一概念不同角度的描述,但实际上也有区别。IOC 强调的是容器和对象的控制权发生了反转,而 DI 强调的是对象的依赖由容器进行注入。从广义上讲,IOC 是一种开发模式,DI 是其中的一种实现方式,可以理解为:使用依赖注入来实现了控制反转。Spring 选择了 DI,从而使 DI 在 Java 开发中深入人心。
二、总结
IOC:是一种设计思想。在 Spring 开发中,由 IOC 容器控制对象的创建、初始化、销毁等。这也就实现了对象控制权的反转,由 我们对对象的控制转变成了Spring IOC 对对象的控制。IOC 解耦了代码,甚至可以让互不相关的对象产生注入关系。
DI:是 IOC 的具体实现。程序把依赖交给容器,容器帮你管理依赖,这就是依赖注入的核心。还需要明白 谁依赖谁,为什么需要依赖;谁注入谁,注入了什么 等逻辑。
IOC 强调的是容器和对象的控制权发生了反转,而 DI 强调的是对象的依赖由容器进行注入。
欢迎大家留言讨论
- 上一篇: 每日一练进击大厂「DAY9」Spring1
- 下一篇: 什么是控制反转(ioc),通过解释总结告诉你
猜你喜欢
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)