网站首页 > 技术文章 正文
今天我们开始接触spring框架,学习这个框架前,我们首先要了解一下什么是IOC(控制反转)和DI(注入依赖)这两个概念,对于很多初学者来说,这两个概念总是模糊不清的,也是非常难理解的,我们这节课就来聊聊控制反转和注入依赖的区别,也就是IOC和DI的区别!
1、IOC是什么?
ioc就是控制反转,不是什么技术,而是spring中的一种思想。在spring中,ioc意味着将你设计好的对象交给spring的容器进行控制,而不是传统的在你对象内部进行控制。
说白了,就是不需要你再去实例某个类,并给这个类的n多个属性进行赋值,这些实例出某个对象并给对象添加属性的操作,都是非常繁琐的事情。而ioc就是将这些繁琐的事情交给了spring的容器。
2、控制反转,到底是谁控制谁?又是反转了什么呢?
在我们传统的java开发中,也就是没有使用框架的开发中,我们都是在对象内部通过new进行创建对象,是程序主动去创建程序所依赖的对象,而spring呢,使用ioc容器控制了对象,当然,真正在spring中,控制的不一定是项目中的对象,也有一些其他的,比如说文件。
至于反转,是相对来说的。我们传统开发,也就是类中创建对象的方式就是所谓的“正转”,那现在不需要对象来创建对象了,而是容器帮我们查找并注入依赖对象,而对于对象来说,他们只是被动的接受了创建,所以是反转。总的来说,依赖对象的获取被反转了。
3、IOC能做什么?
我前面说过,ioc不是一种技术,而是一种思想,是spring的面向对象编程的法则。使用控制反转,我们能设计出松耦合、更加优良的程序。在传统的编程中,我们在对象中创建对象,一旦前者有改动,很容易影响到后者,所以耦合度相对来说较高,而控制反转就是解决了这个问题。
再一个,我们使用了ioc的思想后,把创建和查找依赖对象的任务交给了容器,由容器统一注入对象,这样也方便我们开发过程中查找、修改、测试。试想一下,一百个对象在项目创建的话,是分布在一百个类中方便我们查看,还是在一个配置文件中方便我们查看?
4、什么是DI?
di,就是“依赖注入”,组件(可以暂且理解为上面的对象)之间存在依赖关系,这些关系就是由容器在运行期决定,说白了,就是由容器动态的将某个依赖关系注入到组件之中。
依赖注入的目的,并不是为了软件系统能实现更多的功能,而是为了提升组件重用的频率,搭建一个更加灵活、可扩展的平台。想象一下,哪个对象中需要实例哪个对象,我们可以在配置文件中像操作开关一样的改变,不是方便了很多吗?
5、能不能用一句话来总结ioc和di呢?
说的再通俗易懂一些,控制反转就是把对象的控制权交给了spring容器,注入依赖就是帮助容器去管理这些对象之间的关系。
猜你喜欢
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)