学习spring的童鞋都知道,spring中有两个非常重要的点,Ioc(控制反转)与DI(依赖注入),对于初级玩家来说,这两个概念可能有点模棱两可的感觉,今天就谈下自己的一点理解,不足请多多指教!!! 本文人力资源局的例子只为方便理解,无任何指向意义

一、Ioc是什么?

  控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。当然,这是百度说的,看了还是不懂,so,复杂的东西简单说

 控制反转三个问题:1、谁控制谁;

           2、控制了什么;

           3、怎么就反转了;

第一个问题:谁控制谁,Ioc其实可以把它当做一个容器,一个存储对象的容器,我们开发中的对象都可以交给spring Ioc容器做一个统一的规范管理,就好像是我们每个人都有自己的简历,全部交给人力资源局来管理,Ioc容器就充当一个人力资源局的角色;

第二个问题:控制了什么,既然我们的开发之中的对象已经全部交由Ioc容器来管理了,那我们在获取对象的时候就得由Ioc容器来给我们提供,那么然Ioc容器也就控制了我们实例对象的获取权,就好像我们要去取得一个人的档案,就得由人力资源局提供,人力资源局控制了我们档案的提取;

  第三个问题:怎么就反转了,其实说白了就是一个控制权的反转,好比我们需要一个其他人的档案,我们直接去找这个人家要过来,这个事情是我们来做,控制权就在我们手里(程序过程就是classA需要一个classB的实例,就在A类中直接new 一个B的实例来使用),但是现在我们不直接向这个人所要档案了,我们去向资源局去索要这个人的档案,由人力局把档案给我们(程序过程就是classA需要classB的一个实例,然后告诉Ioc容器,我需要B的实例,你给我一个,然后容器把B的实例给classA),现在,弄档案这个事情是资源局在做而不是我们了,这个弄档案的事情的控制权到了资源局手里而非我们自己去弄,Ioc的职责就像是资源局,我们在使用spring框架开发时,就把我们的对象交由spring Ioc容器来管理,我们对实例对象的控制权利发生了一个反转;

二、Ioc容器能干什么,为什么要把对象的控制权交给容器来管理?

  Ioc是一种设计思想,帮助我们实现程序之间的解耦,设计出耦合性更低更优良的的程序,传统的开发模式在程序类的内部主动的依赖对象(new Object)来实现注入,从而使的类之间高度耦合,有了Ioc容器之后,我们可以把对象的控制权交给容器,让容器为我们创建管理对象,这样,对象之间耦合度变低,程序的架构体系也会更加的灵活;

三、Ioc与DI

  看过很多的博客都把Ioc跟DI分开来说,我个人感觉他们的紧密程度非常之大,像是一条工作链必不可少的部分,工作模式又是相辅相成;

什么是DI:依赖注入,在容器运行的时候,扫描所有的依赖关系,并为之动态的注入对应的依赖关系,比如,我们需要某人的档案了,就给人力资源局发一个通知,告诉他我需要领取xxx的档案,然后资源局就把档案给你送过来,我们领取档案的过程就是DI(依赖注入)

  DI的几个问题:、谁依赖谁

         2、谁注入了谁

         3、注入了什么

   第一个问题:1、谁依赖谁,从我们领取档案的流程来看就知道我们依赖于人力资源局,也就是说程序依赖于Ioc容器

   第二个问题:2、谁注入了谁,人力资源局把档案给我们,也就是说Ioc容器把对象注入了程序之中(这个过程就是依赖注入)

   第三个问题:3、注入了什么,我们向人力资源局要档案然后给了我们,就是容器把我们依赖的对象注入了程序

  

  Ioc与DI的关系:他两的关系就像是同一个问题的不同角度的描述,总是那么的紧密相连,理解过上边的自然心里就清晰了

四、总结

   看到这里,其实Ioc容器就是为我们提供一个公共的管理平台,管理我们对象之间的依赖关系,我们需要什么就向容器要,容器之中如果要就会给我们,我们拿过来直接用,而不用去考虑对象什么时候创建,什么时候销毁,只管用就行了,是不是方便了很多

   以上就是我对Ioc跟DI的一些理解,不足之处多多指教!

spring Ioc/DI的理解的更多相关文章

  1. Spring系列(二):Spring IoC/DI的理解

    这几天重新学习了一下Spring,在网上找了相关的ppt来看,当看到Spring IoC这一章节的时候,先大致浏览了一下内容,有将近50页的内容,内心窃喜~QAQ~,看完这些内容能够对IoC有更深层次 ...

  2. 6. Laravel5学习笔记:IOC/DI的理解

    介绍 IOC 控制反转 Inversion of Control 依赖关系的转移 依赖抽象而非实践 DI 依赖注入 Dependency Injection 不必自己在代码中维护对象的依赖 容器自己主 ...

  3. spring ioc DI 理解

    下面是我从网上找来的一些大牛对spring ioc和DI的理解,希望也能让你对Spring ioc和DI的设计思想有更进一步的认识. 一.分享Iteye的开涛对Ioc的精彩讲解 Ioc—Inversi ...

  4. Spring.Net---3、IoC/DI深入理解

    ------------------------------------------------------------------------ 理解IoC/DI 1.控制反转 --> 谁控制谁 ...

  5. 黑马-Spring(IOC&DI) AOP

    IOC(控制翻转) 概念 把对象的创建.初始化.销毁等工作交给spring容器来做 案例 环境 步骤 1.  写一个HelloWorld类 2.  写一个配置文件   把hello类放到spring容 ...

  6. 零基础学习java------37---------mybatis的高级映射(单表查询,多表(一对一,一对多)),逆向工程,Spring(IOC,DI,创建对象,AOP)

    一.  mybatis的高级映射 1  单表,字段不一致 resultType输出映射: 要求查询的字段名(数据库中表格的字段)和对应的java类型的属性名一致,数据可以完成封装映射 如果字段和jav ...

  7. Spring+IOC(DI)+AOP概念及优缺点

    Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应 ...

  8. 我对IoC/DI的理解

    IoC IoC: Inversion of Control,控制反转, 控制权从应用程序转移到框架(如IoC容器),是框架共有特性 1.为什么需要IoC容器 1.1.应用程序主动控制对象的实例化及依赖 ...

  9. coding++:Spring IOC/DI 实现原理

    什么是 SpringIOC: spring ioc 指的是控制反转,IOC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.交由Spring容器统一进行管理,从而实现松耦合. “控制反 ...

随机推荐

  1. Beta冲刺版本第三天

    该作业所属课程:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 作业要求地址:https://edu.cnblogs.com ...

  2. zencart清空产品商品实用命令

    TRUNCATE TABLE categories; TRUNCATE TABLE categories_description;TRUNCATE TABLE meta_tags_categories ...

  3. Dom修改元素样式

    提纲:我们可以通过js来修改元素的大小,颜色,位置等样式 1.element.style                         行内样式的操作 2.element.className    ...

  4. CentOS7 安装 RocketMQ 实践和小示例

    CentOS7 安装 RocketMQ 实践和小示例 1.通过 SSH 工具(比如 XShell)连接到 CentOS7 服务器上: 2.进入到 /usr/local 目录中: cd /usr/loc ...

  5. h5 rem计算

    设置html默认font-size: 100px,此时默认的页面的width是750px,然后根据手机大小改变html节点的font-size,从而改变rem的大小,代码如下: <script& ...

  6. struts2数据类型转换DefaultTypeConverter

    转https://www.cnblogs.com/IT-1994/p/5998458.html 一.前言 笔者一直觉得,学习一个知识点,你首先要明白,这东西是什么?有什么用?这样你才能了解.好了,不说 ...

  7. 课时5:POW,POS,DPOS(矿工/矿机,工作证明)

    比特币钱包

  8. Prism框架的Module(模块化)编程

    Prism框架用的是新版本的,Prism7.1.关于其中的变动,感兴趣的参考https://www.cnblogs.com/hicolin/p/8694892.html 如何告诉Shell(我们的宿主 ...

  9. VS2015 注释英文

    在VS2015中,框架.NET4.5的智能提示是英文版本的,其实修改的方法很简单,手动改也十分方面,但是考虑到有时候更新后又会变成英文,其实无非就是里面的汉化包是英文版的而已.所以还是留个笔记,方便进 ...

  10. 十大免费SSL证书:网站免费添加HTTPS加密

    SSL证书,用于加密HTTP协议,也就是HTTPS.随着淘宝.百度等网站纷纷实现全站Https加密访问,搜索引擎对于Https更加友好,加上互联网上越来越多的人重视隐私安全,站长们给网站添加SSL证书 ...