IoC——Inversion of Control 控制反转
DI——Dependency Injection 依赖注入
1:如何理解IoC/DI
要想理解上面两个概念,就必须搞清楚如下的问题:
- 参与者都有谁?
- 依赖:谁依赖于谁?为什么需要依赖?
- 注入:谁注入于谁?到底注入什么?
- 控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)?
- 依赖注入和控制反转是同一概念吗?
下面就来简要的回答一下上述问题,把这些问题搞明白了,IoC/DI也就明白了。
(1)参与者都有谁:
一般有三方参与者,一个是某个对象;一个是IoC/DI的容器;另一个是某个对象的外部资源。
又要名词解释一下,某个对象指的就是任意的、普通的Java对象;
IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序;对象的外部资源指的就是对象需要的,但是是从对象外部获取的,都统称资源,比
如:对象需要的其它对象、或者是对象需要的文件资源等等。
(2)谁依赖于谁:
当然是某个对象依赖于IoC/DI的容器
(3)为什么需要依赖:
对象需要IoC/DI的容器来提供对象需要的外部资源
(4)谁注入于谁:
很明显是IoC/DI的容器 注入 某个对象
(5)到底注入什么:
就是注入某个对象所需要的外部资源
(6)谁控制谁:
当然是IoC/DI的容器来控制对象了
(7)控制什么:
主要是控制对象实例的创建
(8)为何叫反转:
反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是
说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容
器获取一个C的实例,然后反向的注入到A类中。
用图例来说明一下,先看没有IoC/DI的时候,常规的A类使用C类的示意图,如图7所示:
图7 常规A使用C示意图
当有了IoC/DI的容器后,A类不再主动去创建C了,如图8所示:
图8 A类不再主动创建C
而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中,如图9所示:
图9 有IoC/DI容器后程序结构示意图
(9)依赖注入和控制反转是同一概念吗?
根据上面的讲述,应该能看出来,依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描
述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器
反向的向应用程序注入应用程序所需要的外部资源。
(10)小结一下:
其实IoC/DI对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在
IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了。
这么小小的一个改变其实是编程思想的一个大进步,这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
分享到:
相关推荐
本文主要探讨了一种基于Java的IOC(Inversion of Control,控制反转)/DI(Dependency Injection,依赖注入)框架的设计与实现。该框架作为一种可复用的设计构件,能够有效支持多层J2EE应用程序的构建,其核心价值...
### C# 依赖注入 控制反转 #### 一、IoC(控制反转)简介 IoC,即"Inversion of Control"(控制反转),是软件工程领域的一个重要概念,特别是面向对象编程中的一个关键设计原则。从字面上理解,IoC指的是程序运行...
依赖注入(Dependency Injection,DI)是实现IOC的一种方式,它通过容器在运行时将依赖关系注入到对象中,使得对象之间解耦,提高了代码的可测试性和可维护性。 Spring中的依赖注入主要通过以下三种方式实现: 1. ...
在软件开发领域,IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是两种重要的设计模式,特别是在Java和Spring框架中被广泛使用。这些概念有助于提高代码的可测试性、可维护性和模块...
Spring 框架的核心是控制反转(IOC)和依赖注入(DI),它可以将对象的创建和依赖关系管理,实现高内聚、低耦合的开发模式。 下面是 Spring 框架的核心知识点: 1. 控制反转(IOC):控制反转是 Spring 框架的...
### Martin Fowler 控制反转与依赖注入 #### 重要概念与背景 Martin Fowler的文章探讨了Java社区近期关注的一个热点话题:轻量级容器及其背后的模式。这些容器的主要目标是帮助开发者将来自不同项目的组件组装成一...
**Spring 框架中的控制反转 (IoC) 和依赖注入 (DI)** 在软件开发中,控制反转(Inversion of Control,简称IoC)是一种设计原则,它将对象的创建和管理权从代码中剥离出来,转交给一个外部容器(如Spring框架)。...
Spring框架中的IOC(控制反转)和DI(依赖注入)是两种关键的设计模式,它们极大地提升了软件的可维护性和可扩展性。控制反转是一种设计思想,它改变了传统的对象创建方式,将对象的创建和管理权从应用程序自身转移...
【控制反转(IoC)与依赖注入(DI)详解】 控制反转(Inversion of Control,简称IoC)是面向对象编程领域的一种设计原则,旨在降低软件组件间的耦合度。在传统的程序设计中,对象A如果依赖于对象B,那么对象A在...
Spring框架的主要思想是控制反转和依赖注入,使用容器来管理对象之间的依赖关系,而不是对象本身来管理。 控制反转(IoC) 控制反转是指容器来管理对象之间的依赖关系,而不是对象本身来管理。控制反转的主要思想...
### 什么是控制反转(IoC)与依赖注入(DI) #### 控制反转(IoC) 控制反转(Inversion of Control,简称IoC)是软件工程领域的一个设计模式,主要用于简化对象之间的依赖关系管理。在传统的面向对象编程中,对象间的...
控制反转(IoC)和依赖注入(DI)是软件设计模式中的重要概念,主要用于降低组件间的耦合度,提高代码的可维护性和可扩展性。IoC的核心思想是将对象的创建和管理交给一个外部容器,而不是由对象自身负责,从而实现...
在软件设计领域,依赖倒置、控制反转、依赖注入以及面向接口编程是四个非常重要的概念,它们都是现代软件开发中的核心原则,特别是对于构建可扩展、可维护的系统至关重要。 首先,我们来深入理解一下“依赖倒置”...
PHP中的控制反转(IoC)与依赖注入(DI)是面向对象编程中非常重要的设计模式,它们是为了解决传统编程中类与类之间过于紧密耦合的问题而设计的。在PHP中实现这些设计模式可以帮助开发者提高代码的可维护性和可扩展...
Spring的核心特性之一是依赖注入(Dependency Injection,简称DI),也称为控制反转(Inversion of Control,简称IoC)。 **依赖注入 (DI) 和 控制反转 (IoC)** 依赖注入是Spring的核心设计原则之一。它是一种设计...
### Spring IoC与注解依赖注入详解 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一个开源项目,最初是为了解决企业级应用开发中的复杂性问题而诞生的。Spring框架的核心特性包括IoC(Inversion of ...
在Spring框架中,控制反转(IoC,Inversion of Control)和依赖注入(DI,Dependency Injection)是核心设计理念,它们极大地简化了Java应用的开发和维护。本文将深入探讨如何自定义Spring实现读取`...
依赖注入(Dependency Injection,DI)是实现控制反转的一种方式,它强调的是依赖的提供。在上述代码中,`UserServiceTest`类不再直接创建依赖对象,而是通过框架或容器(如Spring)来注入依赖。依赖注入可以通过...
依赖倒置、控制反转和依赖注入是面向对象编程中用于减少模块间耦合的重要原则,它们都是为了提高软件系统的灵活性和可维护性。在本文中,我们将深入探讨这些概念及其在实际应用中的区别。 首先,依赖倒置原则...
IoC/DI(InverseofControl/DependencyInjection,控制反转/依赖注入)模式是一种企业级架构模式,通过将应用程序控制权反转交移给框架,并以构造器注入、属性设置器注入等方式将类实体注入到特定应用层中,最终实现...