`

依赖注入和控制反转

阅读更多

依赖注入和控制反转

1吴鹏建 2010-07-26 12:20

看到一个对这个概念很好诠释的帖子,特转发过来供大家一起学习

转载地址http://www.iteye.com/topic/692793

 

 

 IoC——Inversion of Control  控制反转
 DI——Dependency Injection   依赖注入


        要想理解上面两个概念,就必须搞清楚如下的问题:

  • 参与者都有谁?
  • 依赖:谁依赖于谁?为什么需要依赖? 
  • 注入:谁注入于谁?到底注入什么?
  • 控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)?
  • 依赖注入和控制反转是同一概念吗?

        下面就来简要的回答一下上述问题,把这些问题搞明白了,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容器来创建并注入它所需要的资源了。
        这么小小的一个改变其实是编程思想的一个大进步,这样就有效的分离了对象和它所需要的外部资源,使得它们松散耦合,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

分享到:
评论
13 楼 hongzhounlfd 2016-08-24  
很透彻,很详细
12 楼 jefferyqjy 2016-07-20  
谢谢~言简意赅~很明了!
11 楼 elderbrother 2016-07-09  
太好了,谢谢
10 楼 east_zyd_zhao 2016-03-18  
终于搞明白了
9 楼 Dremeng 2016-03-02  
       完美,一看就懂理解透彻
8 楼 abc_cjf 2015-10-28  
   
写得太好了,一看就懂
7 楼 q13940237630 2015-09-08  
这个帖子实在是太棒了。。。必须赞   
6 楼 lq380359384 2015-07-12  
说得太好了,简单易懂
5 楼 cuqing 2015-06-27  
言简意赅,不错,赞一个!
4 楼 林家小少 2015-03-14  
希望能加上一个简单的代码实例
3 楼 林家小少 2015-03-14  
真心谢谢 懂了
2 楼 sf_dream 2015-03-08  
大神,说的太好了,我可以转载吗
1 楼 FourWenWen 2015-01-18  
说的真好,我瞬间懂了。

相关推荐

    c# 依赖注入 控制反转

    ### C# 依赖注入 控制反转 #### 一、IoC(控制反转)简介 IoC,即"Inversion of Control"(控制反转),是软件工程领域的一个重要概念,特别是面向对象编程中的一个关键设计原则。从字面上理解,IoC指的是程序运行...

    Spring基础实例(依赖注入和控制反转)

    本实例主要探讨Spring框架的基础概念,包括依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)。这两个概念是Spring的核心特性,它们极大地简化了代码的维护和管理,提高了软件...

    理解php依赖注入和控制反转

    依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是面向对象编程中的设计模式,特别是在PHP这样的动态语言中,它们是实现松耦合的重要手段。这两个概念通常一起讨论,因为它们...

    Spring_01_入门篇_依赖注入(控制反转)_ANN

    **依赖注入 (DI) 和 控制反转 (IoC)** 依赖注入是Spring的核心设计原则之一。它是一种设计模式,用于解决组件之间的耦合问题。在传统的Java程序中,对象通常会自行创建其依赖的对象,但在Spring中,依赖的对象是由...

    依赖注入控制反转面向切面.doc

    依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是软件设计中的核心概念,尤其在面向对象编程中扮演着重要角色。这两种技术的主要目标是降低代码之间的耦合度,提高模块间的...

    依赖注入和控制反转简介

    依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IOC)是面向对象编程中的设计模式,主要用于解决复杂系统中的依赖关系管理问题。这两种概念在现代软件开发中,尤其是.NET框架中,...

    理解Spring中的依赖注入和控制反转

    在Spring框架中,依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是核心设计理念,它们旨在降低组件之间的耦合度,提高代码的可测试性和可维护性。理解这两个概念对于掌握...

    spring 控制反转和依赖注入.docx

    Spring 控制反转和依赖注入基础知识详解 Spring 框架是 Java 企业级开发的轻量级开发框架,于 2003 年创建,主要用于解决企业级开发的复杂性。其主要优势在于分层架构,允许在不同层级中使用一个组件(其他框架)...

    Spring 控制反转 依赖注入

    **Spring 框架中的控制反转 (IoC) 和...总之,Spring的控制反转和依赖注入机制是其核心特性,它们提高了代码的可测试性、降低了耦合度,并使应用程序更加灵活。理解并熟练运用这些概念,对提升开发效率和质量至关重要。

    Spring 核心机制(依赖注入)

    在Spring框架中,依赖注入和控制反转实际上是同一概念的不同表达形式。当程序中的组件需要另一个组件的帮助时,通常是由调用者(即需要帮助的角色)来创建被调用者(即提供帮助的角色)的实例。但在Spring中,这个...

    Spring_01_入门篇_依赖注入(控制反转)_XML

    它的核心特性是依赖注入(Dependency Injection,简称DI),也被称为控制反转(Inversion of Control,简称IOC)。这个特性使得开发者可以更专注于业务逻辑,而不需要过多地关注对象的创建和管理。 **依赖注入(DI...

    springIOC控制反转 依赖注入实例

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它改变了传统Java应用程序中对象的创建和管理方式。在传统的程序设计中,我们通常手动创建对象并管理它们之间的依赖关系,而在Spring中,这些...

    理解php依靠注入和掌握反转_.docx

    依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是软件设计模式中的重要概念,特别是在面向对象编程中,它们有助于提高代码的可测试性、可维护性和解耦性。在PHP中,这两个...

    依赖注入相关解释

    依赖注入和控制反转(Inversion of Control, IoC)实际上是同一个概念的不同表达方式。当某个组件(如Java实例)需要另一个组件的帮助时,在传统程序设计中,通常是由调用方直接创建被调用方的实例。而在Spring框架中...

    依赖倒置+控制反转+依赖注入+面向接口编程

    结合这些概念,我们可以看到,依赖倒置、控制反转和依赖注入都是为了降低代码之间的耦合,增强软件的灵活性和可扩展性。面向接口编程则是为了提供一种标准化的交互方式,使得不同的实现可以共存并互换。在实际开发中...

    向依赖关系宣战--依赖倒置、控制反转和依赖注入辨析

    依赖倒置、控制反转和依赖注入是面向对象编程中用于减少模块间耦合的重要原则,它们都是为了提高软件系统的灵活性和可维护性。在本文中,我们将深入探讨这些概念及其在实际应用中的区别。 首先,依赖倒置原则...

    Java Spring面试题

    Spring框架的设计理念是基于依赖注入、控制反转和面向方面编程等概念。 Spring框架的组成 Spring框架由多个模块组成,包括核心容器、AOP、Web模块、数据访问模块等。其中,核心容器是Spring框架的核心部分,提供了...

    PHP依赖注入(DI)和控制反转(IoC)详解

    依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是同一个概念,它们在软件设计中扮演着至关重要的角色,尤其是对于PHP这样的编程语言。这两种设计模式的主要目标是减少代码...

    Spring 控制反转和依赖注入

    Spring 控制反转和依赖注入

Global site tag (gtag.js) - Google Analytics