1.1、IoC是什么  Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:  ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。  ●为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。  用图例说明一下,传统程序设计如图2-1,都是主动去创建相关对象然后再组合起来:图1-1 传统应用程序示意图  当有了IoC/DI的容器后,在客户端类中不再主动去创建这些对象了,如图2-2所示:图1-2有IoC/DI容器后程序结构示意图1.2、IoC能做什么  IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。  其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。  IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。1.3、IoC和DI  DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。  理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:  ●谁依赖于谁:当然是应用程序依赖于IoC容器;  ●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;  ●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;  ●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。  IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。  看过很多对Spring的Ioc理解的文章,好多人对Ioc和DI的解释都晦涩难懂,反正就是一种说不清,道不明的感觉,读完之后依然是一头雾水,感觉就是开涛这位技术牛人写得特别通俗易懂,他清楚地解释了IoC(控制反转) 和DI(依赖注入)中的每一个字,读完之后给人一种豁然开朗的感觉。我相信对于初学Spring框架的人对Ioc的理解应该是有很大帮助的。

请简述什么是spring的ioc和di_Spring的IoC与DI的理解相关推荐

  1. 请简述什么是spring的ioc和di_请简述什么是 Spring 的 IoC 和 DI?_学小易找答案

    [连线题]把微生物和适用的生物反应器连线 [判断题]混凝土保护层是指从混凝土表面到箍筋公称直径外边缘之间的最小距离. [多选题]下列哪些问题是我们人类目前面临的严峻生态环境问题? [单选题]这是什么器 ...

  2. 请简述什么是spring的ioc和di_Spring中的IoC与DI的理解

    1.IoC是什么? IoC(Inversion of Control)控制反转,IoC是一种新的Java编程模式,目前很多轻量级容器都在广泛使用的模式. 2.IoC解决了什么问题? 在IoC出现以前, ...

  3. 请简述什么是spring的ioc和di_绿茶用什么茶叶罐储存?有6种茶叶罐适合

    阅读本文前,请您先点击上面蓝色字体"茶间友舍"再点击"关注",这样您就可以免费收到我们的最新内容了,每天都会有更新,完全是免费订阅,请放心关注. 几片茶叶,被浸 ...

  4. 请简述什么是spring的ioc和di_小编Spring是什么、spring容器、IOC和DI

    1.Spring (1)Spring是什么? 是一个轻量级的.用来简化企业级应用开发的开发框架. 注: a.简化开发: Spring对常用的api做了简化,比如,使用Spring jdbc来访问数据库 ...

  5. 请简述什么是spring的ioc和di_理解Spring中的IoC和DI

    什么是IoC和DI IoC(Inversion of Control 控制反转):是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度.其基本思想是:借助于"第三方" ...

  6. Spring的控制反转(IOC)和依赖注入(DI)具体解释

    Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...

  7. 抛开 Spring 去理解 IOC 思想:原来 IOC 容器这么简单

    很多小伙伴们看到标题可能就会想到抛开 Spring 就不会存在 IOC 思想了,其实不然在接下来的文章中就会讲述到. 很多小伙伴在理解 IOC 的时候通常会和 Spring 放到一起去学习,首先呢 S ...

  8. 字节跳动面试题:“请你描述下 Spring Bean 的生命周期?”

    1. 引言 "请你描述下 Spring Bean 的生命周期?",这是面试官考察 Spring 的常用问题,可见是 Spring 中很重要的知识点. 我之前在准备面试时,去网上搜过 ...

  9. 请简述一下线程的sleep()方法和yield()方法的区别?

    请简述一下线程的sleep()方法和yield()方法的区别? ①sleep()方法给其他线程机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会. yield()方法只会给相同优先级或更高优 ...

  10. 【Spring】Spring第一天 - 环境搭建、IoC 详解、DI 详解等

    一.Spring 框架简介及官方压缩包目录 介绍 1.主要发明者:Rod Johnson 2.轮子理论推崇者: 2.1 轮子理论:不用重复发明轮子. 2.2 IT 行业:直接使用写好的代码. 3.Sp ...

最新文章

  1. ASP.NET常见错误,原因及解决方法(2003版)_不断更新.....
  2. 重磅!2021年考研国家线正式公布,部分学科分数线比去年更低!
  3. linux后台运行cat命令,Linux程序前台后台切换
  4. 确定不来了解一下什么是 BIO NIO AIO 阻塞 非阻塞 同步 异步?
  5. python 发送邮件附件很慢_python下smtpsendmail发送特别慢
  6. java铃声类_java多线程抓取铃声多多官网的铃声数据
  7. python send 案例_python使用rabbitmq实例三,交换机
  8. k8s高可用集群_搭建高可用集群(初始化和部署keepalived)---K8S_Google工作笔记0055
  9. jQuery UI 应用不同Theme的办法
  10. Delphi编程 -- 如何实现一个支持Visual Basic的For Each调用的COM对象
  11. ssh:could not resolve hostname XXX:Temporary failure in name resolution
  12. JDK自带观察者的使用
  13. oracle vfp,VFP如何连SQL Server及Oracle
  14. Systrace 响应速度实战 2 :响应速度实战分析 - 以启动速度为例
  15. mac显示隐藏文件夹
  16. Win10 如何关闭烦人的任务栏广告,驱动人生广告,2345广告
  17. 苹果考虑推迟发布5G iPhone
  18. 推荐10本程序员必读的书籍!
  19. 通过预先数据标注让AI算法更加精确
  20. 广东高中生多少人_广东省高中生100米短跑记录是多少?谢谢

热门文章

  1. MySQL(基础知识)
  2. python-appium520-2初步使用
  3. linux下wps的字体缺失解决方法
  4. ubuntu使用笔记
  5. 说一说javascript跨域和jsonp
  6. iptables 命令详解
  7. 第十三次CCF CSP认证(2018年3月)真题棋局评估
  8. Python实现Windows电脑定时关机
  9. 智能优化算法:乌鸦搜索算法-附代码
  10. 从零基础入门Tensorflow2.0 ----七、36. 文本生成之---2. 构建模型