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框架系列(3) - 深入浅出Spring核心之控制反转(IOC)

    在Spring基础 - Spring简单例子引入Spring的核心中向你展示了IoC的基础含义,同时以此发散了一些IoC相关知识点; 本节将在此基础上进一步解读IOC的含义以及IOC的使用方式.@pd ...

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

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

  3. Spring 01: Spring配置 + IOC控制反转 + Setter注入

    简介 Spring框架是一个容器,是整合其他框架的框架 他的核心是IOC(控制反转)和AOP(面向切面编程),由20多个模块构成,在很多领域都提供了优秀的问题解决方案 特点 轻量级:由20多个模块构成 ...

  4. Spring的IOC控制反转和依赖注入-重点-spring核心之一

    IoC:Inverse of Control(控制反转): 读作"反转控制",更好理解,不是什么技术,而是一种设计思想,好比于MVC.就是将原本在程序中手动创建对象的控制权,交由S ...

  5. Spring 04: IOC控制反转 + DI依赖注入

    Spring中的IOC 一种思想,两种实现方式 IOC (Inversion of Control):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入 核心业务:(a)对象的创建 ...

  6. 三大框架 之 Spring(IOC控制反转、DI依赖注入)

    目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...

  7. [转]Java Spring的Ioc控制反转Java反射原理

    转自:http://www.kokojia.com/article/12598.html 学习一个东西的时候,如果想弄明白,最好想想框架内部是如何实现的,如果是我做我会怎么实现.下面我就写一个Ioc ...

  8. Spring之IOC/DI(反转控制/依赖注入)_入门Demo

    在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new ob ...

  9. [转帖]什么是IOC(控制反转)、DI(依赖注入)

    什么是IOC(控制反转).DI(依赖注入) 2018-08-22 21:29:13 Ming339456 阅读数 20642   原文地址(摘要了部分内容):https://blog.csdn.net ...

  10. 回顾Spirng ioc 控制反转

    Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的.结合网上对Spring Ioc的理解,回顾一下自 ...

随机推荐

  1. 一个Work Stealing Pool线程池的实现

    一.一般来说实现一个线程池主要包括以下几个组成部分: 1)线程管理器 :用于创建并管理线程池 . 2)工作线程 :线程池中实际执行任务的线程 . 在初始化线程时会预先创建好固定数目的线程在池中 ,这些 ...

  2. Zookeeper在windows环境下安装

    1.已安装JDK并配置好了环境变量 2.下载Zookeeper,在清华大学镜像下载,选择合适版本  https://mirrors.tuna.tsinghua.edu.cn/apache/zookee ...

  3. verilog 实现中值滤波

    图像信号在形成.传输和记录的过程中,由于成像系统.传输介质.工作环境和记录设备等的固有缺陷,不可避免地产生各种类型的噪声,降低了图像的质量,进而影响后续处理(如边缘检测.图像分割.特征提取.模式识别等 ...

  4. 【LeetCode】Balanced Binary Tree(平衡二叉树)

    这道题是LeetCode里的第110道题. 题目要求: 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. ...

  5. 深度学习:Sigmoid函数与损失函数求导

    1.sigmoid函数 ​ sigmoid函数,也就是s型曲线函数,如下: 函数: 导数: ​ 上面是我们常见的形式,虽然知道这样的形式,也知道计算流程,不够感觉并不太直观,下面来分析一下. 1.1 ...

  6. Leetcode 475.供暖气

    供暖气 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房屋和供暖器 ...

  7. cf- 297 < a >--字符串操作技巧

    A. Vitaliy and Pie time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. BZOJ 3626 [LNOI2014]LCA ——树链剖分

    思路转化很巧妙. 首先把询问做差分. 然后发现加入一个点就把路径上的点都+1,询问的时候直接询问到根的路径和. 这样和原问题是等价的,然后树链剖分+线段树就可以做了. #include <map ...

  9. 在 IBM RAD 平台上基于 JAX-WS 开发 Web Services服务器端,客户端

    原文地址:https://www.ibm.com/developerworks/cn/websphere/library/techarticles/1305_jiangpl_rad/1305_jian ...

  10. Python Base Two

    //fourth day to study python 24. In python , how to create funcation. we can use def to define funca ...