3.控制反转(IOC)和依赖注入(DI)的关系

简介: IoC(Inversion of Control)Ioc即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
IoC(Inversion of Control
Ioc即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
DI(Dependency Injection
DI即“依赖注入”,是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

要理解IOC和DI的关系,就要理解这两个概念,理解Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”。理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”。
1.谁控制谁,控制什么
传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对
象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
2.为何是反转,哪些方面反转了
有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象,对象只是被动的接受依赖对象;哪些方面反转了?依赖对象的获取被反转了
3.谁依赖于谁
当然是应用程序依赖于IoC容器
4.为什么需要依赖
应用程序需要IoC容器来提供对象需要的外部资源
5.谁注入谁
很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象
6.注入了什么
就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)

IoC和DI有什么关系呢?
IoC和DI有什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin?Fowler又给出了一个新的名字:“依赖注入”,相对IoC?而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。

总结
其实IoC/DI对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了。
这么小小的一个改变其实是编程思想的一个大进步,这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活


参考:

相关文章
|
6月前
|
XML Java 数据格式
从六个方面读懂IoC(控制反转)和DI(依赖注入)
在一开始学习 Spring 的时候,我们就接触 IoC 了,作为 Spring 第一个最核心的概念,我们在解读它源码之前一定需要对其有深入的认识,对于初学Spring的人来说,总觉得IOC是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring IOC的理解。
202 2
|
6月前
|
XML Java 数据格式
深入理解 Spring IoC 和 DI:掌握控制反转和依赖注入的精髓
在本文中,我们将介绍 IoC(控制反转)和 DI(依赖注入)的概念,以及如何在 Spring 框架中实现它们。
375 0
|
3月前
|
设计模式 Java Spring
依赖注入(DI)及其三个类
【8月更文挑战第24天】
35 0
|
6月前
|
容器
02_IOC控制反转 DI依赖注入
02_IOC控制反转 DI依赖注入
46 0
|
XML Java 测试技术
springIOC(控制反转)和DI(依赖注入)
springIOC(控制反转)和DI(依赖注入)
71 0
|
6月前
|
容器
IOC 控制反转和DI依赖注入
IOC 控制反转和DI依赖注入
|
Java 容器 Spring
[javaweb]——spring框架之控制反转(IOC)与依赖注入(DI)
[javaweb]——spring框架之控制反转(IOC)与依赖注入(DI)
|
设计模式 Java 容器
DI依赖注入篇
依赖注入(Dependency Injection,DI)是一种设计模式,它用于解耦组件之间的依赖关系。在DI中,组件不再负责自己的依赖对象的创建和管理,而是由外部容器负责将依赖对象注入到组件中。
148 1
|
Java Maven
SpringFrame-ioc 依赖注入
SpringFrame-ioc 依赖注入
|
容器
DI——依赖注入
DI——依赖注入
152 0