欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

控制反转及注入依赖详情

程序员文章站 2022-07-05 22:46:59
??今天我们开始接触spring框架,学习这个框架前,我们首先要了解一下什么是IOC(控制反转)和DI(注入依赖)这两个概念,对于很多初学者来说,这两个概念总是模糊不清的,也是非常难理解的,我...

??今天我们开始接触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容器,注入依赖就是帮助容器去管理这些对象之间的关系。