IoC,Inversion Of Control 即控制反转,由容器来管理业务对象之间的依赖关系,而非传统方式中的由代码来管理。

其本质。即将控制权由应用程序代码转到了外部容器,控制权的转移就是所谓的反转,其带来的最大的优点是减少了业务对象之间的依赖程度,即实现了解耦。

Spring的IoC容器主要使用DI(Dependency Injection,依赖注入)方式实现的。不须要主动查找,对象的查找、定位和创建所有由容器管理,容器会将符合依赖关系的对象通过属性(setter等)或者构造函数传递给须要的对象。

使用IoC能够带来下面优点:

1、查询依赖操作和应用代码分离。大量降低了Factory和Singleton的数量,使代码层次更加清晰。主要原因是我们不再查找、定位、创建和管理对象之间的依赖关系了。都交给IoC容器管理了

2、没有侵入性,不须要依赖容器的API,也不须要实现一些特殊接口。这样我们的受控对象能够搬出容器进而单独使用。

3、能够从IoC容器中直接获得一个对象然后直接使用。而无需考虑对象的创建过程。(工厂模式)

从网上看了一个样例,认为不错。贴过来帮助我们理解:

我们是怎样找女朋友的?常见的情况是,我们到处去看哪里有长得美丽身材又好的mm。然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们。投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的。我们必须自己设计和面对每一个环节。传统的程序开发也是如此。在一个对象中,假设要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比方Connection等)。对象始终会和其它的接口或类藕合起来。

那么IoC是怎样做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了非常多男男女女的资料,我能够向婚介提出一个列表,告诉它我想找个什么样的女朋友,比方长得像李嘉欣,身材像林熙雷。唱歌像周杰伦。速度像卡洛斯,技术像齐达内之类的。然后婚介就会依照我们的要求。提供一个mm,我们仅仅须要去和她谈恋爱、结婚即可了。

简单明了,假设婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此。全部的类都会在spring容器中登记。告诉spring你是个什么东西,你须要什么东西,然后spring会在系统执行到适当的时候,把你要的东西主动给你,同一时候也把你交给其它须要你的东西。全部的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个详细的对象而言。曾经是它控制其它对象,如今是全部对象都被spring控制。所以这叫控制反转

事实上,我们能够把IoC看做是工厂模式的升华。IoC好比是一个大工厂,仅仅只是在这个大工厂里生成的对象都是在XML文件里定义的。然后利用Java的反射实例化。

在没有Spring之前我们也是这么做的,仅仅是Spring的IoC更加强大完好。

有利就有毙,IoC也有一定的弊端:

1、使用反射变成,在效率上有些损耗。

2、缺乏更加智能的IDE,写XML中时,错误不easy暴露。推迟到执行期才干发现。

但相对于IoC提高的维护性和灵活性来说,这点缺点又显得微不足道

写到最后,忽然想到《走遍美国》里。唱片公司制片在rebaca录制完唱片后对她说的一句话:Don't call us,we'll call you

用这句话来形容IoC再合适只是。

Spring核心(ioc控制反转)相关推荐

  1. 详解spring的IOC控制反转和DI依赖注入

    转载 详解spring的IOC控制反转和DI依赖注入 2018-06-05 15:45:34 jiuqijack 阅读数 2945 文章标签: spring IOC控制反转 DI依赖注入 更多 分类专 ...

  2. Spring原理-IOC控制反转

    spring相关文章 Spring原理-IOC控制反转 Spring框架七大核心模块 Spring Beans原理–bean生命周期 一.Spring概述 1. 定义 Spring是一个轻量级Java ...

  3. Spring的ioc控制反转

    spring介绍 Spring的出现是为了取代EJB(Enterprise JavaBean)的臃肿.低效.脱离现实的缺点. Spring致力于J2EE应用的各层(表现层.业务层.持久层)的解决方案, ...

  4. Spring之IOC~控制反转

    1.Spring概述 1.1.什么是Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One- ...

  5. Spring-初识Spring框架-IOC控制反转(DI依赖注入)

    ---恢复内容开始--- IOC :控制反转 (DI:依赖注入) 使用ioc模式开发 实体类必须有无参构造方法 1.搭建Spring环境 下载jar http://maven.springframew ...

  6. 浅谈spring之IoC控制反转

    以下学习资料来源于b站动力节点 spring: 出现是在2002左右,解决企业开发的难度.减轻对项目模块之间的管理,类和类之间的管理, 帮助开发人员创建对象,管理对象之间的关系.spring核心技术 ...

  7. 三大框架之spring框架+IoC控制反转、DI依赖注入

    三大框架:业务层框架Spring+IoC+DI 往期文章:jsp与cookie.重定向与RESTFul架构支持 下一章节: 持久层框架MyBatis 初识Spring框架 MyBatis 入门http ...

  8. (八)Spring之IOC控制反转、DI依赖注入介绍和使用(详解)

    文章目录 前言 Spring Spring IOC 简介 Bean IOC 概述 IOC 本质理解 Spring IOC 应用 IOC xml装配 IOC 依赖注入 IOC Bean的作用域 IoC ...

  9. Spring的IOC(控制反转)与DI(依赖注入)

    Spring控制反转与依赖注入 文章目录 Spring控制反转与依赖注入 1. 控制反转(IOC) 2. 依赖注入(DI) 3. 总结 1. 控制反转(IOC) 控制反转(Inversion of C ...

  10. spring:IOC控制反转中“dI“

    声明student对象 注入:就是赋值的意思 di:给属性赋值 1.set注入 设置注入:spring调用类的set方法 可以再set方法中完成属性赋值 1)简单类型的set注入 先来说说基本的格式 ...

最新文章

  1. Data - 【转】数据分析的道与术
  2. OpenFace库(Tadas Baltrusaitis)中基于HOG进行正脸人脸检测的测试代码
  3. npm-debug.log文件出现原因
  4. usb连接不上 艾德克斯电源_艾德克斯双范围可编程直流电源IT6800A/B系列
  5. Linux字符设备驱动实例
  6. 二叉树翻转(递归 + 非递归)
  7. Python+Appium+夜神模拟器安装与简单运行(1/2)
  8. LeetCode 309 Best Time to Buy and Sell Stock with Cooldown 解决方案
  9. mysql kill sql_批量 kill mysql 中运行时间长的sql
  10. git config配置
  11. MySql常用命令集
  12. 在线社交网络的影响力最大化算法
  13. windows系统扩展C盘的工具推荐(解决了C盘和压缩卷不相邻无法扩展C盘问题)
  14. 第6节 构建简单局域网并实现远程管理路由器与交换机——基于PacketTracer仿真
  15. 友盟用户反馈(官方文档学习而来)
  16. 义乌机器人餐厅价格表_义乌一餐厅机器人端盘萌翻吃货
  17. Python解决羊车门问题
  18. 一起学爬虫(Python) — 18 一生之敌查帕斯
  19. 黄斑裂孔易致失明,年长者和高度近视者尤其要注意!
  20. 计算机系全国第一大学,中国计算机专业最“牛”的4所大学,清华第1,当之无愧...

热门文章

  1. 爬虫学习笔记(十七)—— 字符验证码
  2. 复习笔记(三)——C++类和对象
  3. 【Linux】【服务器】 CentOS7下卸载MySQL详细过程步骤
  4. unable to access ‘https://gitee...‘: Failed to connect to 127.0.0.1 port 31181 after 2029 ms: Connec
  5. linux dns中文域名,Nginx 中文域名配置详解及实现
  6. Puppeteer + TypeScript 模拟 Ctrl + A 操作
  7. 微软 python_微软推出 Pylance,改善 VS Code 中的 Python 体验
  8. C++单链表学习随想
  9. 【Linux】24.gdb调试和coredump
  10. Caffe学习系列(9):运行caffe自带的两个简单例子