Spring之IOC控制反转和DI依赖注入

1、控制反转是什么?

IOC控制反转,所谓反转是指使用方本身不负责依赖对象的创建和维护,而将对象的管理(创建、维护、销毁)都交给Spring容器管理,在使用被调用类的时候Spring容器将被调用类的对象反转给使用方(传统的使用方法,使用对象,都是在使用方的内部new出实使用类的对象)。将创建对象的权利交给第三方,控制反转就是控制权的转移。
通过控制反转,可以实现由Spring容器控制各个类之间的关系。借助于控制反转,被调用者是被“注入”而不是被硬编码到使用方的代码中,这可以大大降低调用者和被调用者之间的依赖关系。
比如:A程序要使用B程序中的方法,首先就是要创建(new)出B的对象,然后使用B的对象去调用它的方法。
控制反转,就是将A和B的对象都交由Spring管理。
使用传统的方法,存在的问题:
使用方和被使用方之间的耦合度太高
控制反转带来的好处:
1、资源集中管理,实现资源的可配置和易管理。
2、降低了使用资源双方的依赖程度,也就是我们说的耦合度。
控制反转的使用

2、依赖注入是什么?

DI依赖注入,依赖注入是控制反转的一种实现方式,由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。也就是获得依赖对象的过程由自身管理变为由IOC容器主动注入。通过反射机制实现。讲的通俗点,就是在运行期,由Spring根据配置文件,将其他对象的引用通过组件的提供的setter方法或者构造方法等进行设定。
所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。

3、控制反转和依赖注入的关系

依赖注入(Dependency Injection)和控制反转(Inversion of Control)是不同维度的同一个概念。
其实就是:当使用方需要被使用方的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。
我自己的理解:控制反转就是由spring容器来控制使用方A调用的具体被使用类B。依赖注入就是使用方A依赖于spring容器的注入。
代码解释:
传统的方式,Servise是通过调用类的创建,进行使用的

@Controller("controller1")
public class Controller1 {private Servise service = new Servise();public void add(){service.add();System.out.println("Controller1.add()....");}
}

Spring中,将所有的对象交由Spring容器处理,当我们需要使用的所需求的类的资源的时候,Spring就帮使用类注入相应的资源。

@Controller("controller1")
public class Controller1 {@Autowiredprivate Servise service;public void add(){service.add();System.out.println("Controller1.add()....");}
}

Spring中控制反转和依赖注入相关推荐

  1. Spring 中控制反转 和 依赖注入 的区别和关系

    控制反转 (IOC),面向对象的一种设计原则,目的是降低耦合度.依赖注入(DI)是实现控制反转的常见方式,控制反转的另外一种实现方式是 依赖查找.控制反转中的控制指的是自己控制(创建)自己的成员变量, ...

  2. SSM框架—Spring基础—控制反转和依赖注入(概念)

    控制反转: 控制反转(IoC)是面向对象编程的一个设计原则,用于降低代码耦合度 在传统面向对象编程中,获取对象的方式是用关键字"new"主动创建一个对象,也就是说,应用程序掌握着对 ...

  3. Spring的控制反转与依赖注入

    学习过Spring的都知道Spring有三大核心的概念,分别是控制反转(IOC).依赖注入(DI)和面向切面编程(AOP).今天就来聊聊我对控制反转和依赖注入的了解,至于面向切面编程放到后面讲解. 一 ...

  4. Spring的控制反转以及依赖注入,控制反转使程序具有高拓展性。

    1. 控制反转(Inversion of Control, IOC) 将对象的创建.赋值.管理交给容器(Spring),通过xml文件即可修改对象的属性,不必修改源代码,具有高拓展性.各个模块间的对象 ...

  5. spring的控制反转和依赖注入讲解

    1.Spring 1.1 简介 2002年首次推出Spring的雏形,interface21框架 2004正式发布1.0版本 解决企业应用开发的复杂性,其理念是使现有的技术更加容易使用! SSH:St ...

  6. Spring框架中的控制反转和依赖注入

    控制反转: 控制反转是用来降低代码之间的耦合度的,基本思想就是借助"第三方"实现具有依赖对象的解耦. 为什么需要控制反转,因为项目中对象或多或少存在耦合.控制反转的关键在于Ioc容 ...

  7. 轻松了解Spring中的控制反转和依赖注入

    点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长 每天早上8点20分, 第一时间与你相约 每日英文 When you have something you really l ...

  8. Spring容器,控制反转,依赖注入

    Spring boot学习之旅,为更好督促自己学习以记之,仅供参考. spring容器 程序启动的时候会创建spring容器,扫描给spring容器一个清单,比如:@Controller, @Bean ...

  9. Spring Ioc/DI 控制反转和依赖注入

    Ioc(Inversion of Control)和DI(Dependency Injection)的全称分别是控制反转和依赖注入. 如何理解这两个概念呢? Ioc Ioc(控制反转)实际上就说把对象 ...

最新文章

  1. iOS SDWebImage 缓存机制与缓存策略
  2. vb.net限制datagridview不能选择_家里安装200兆宽带,网速还是很慢怎么办?教你一招解除网速限制...
  3. Vue.js 组件 处理边界情况
  4. 后疫情时代,乳企如何迎来下一个风口?
  5. java txtreader_一个简单的Java读写文件例子
  6. java 操作 word 表格和样式_poi 操作excel和word(修改样式和内容)
  7. 20145233 20145228《信息安全系统设计基础》第二次实验报告
  8. mysql的常用的备份工具_39、mysql常用备份工具
  9. Python 之 Python2 和 Python3 的区别
  10. 链表c++代码的实现
  11. 【今日CV 视觉论文速览】 19 Nov 2018
  12. 将Markdown嵌入到我们的HTML页面中
  13. 超干货!为了让你彻底弄懂 MySQL 事务日志,我通宵搞出了这份图解!
  14. java list foreach 修改_Java ArrayList在foreach中remove的问题分析
  15. redis灵魂拷问:聊一聊zset使用
  16. 显示器刷新率30hz_如何使您的120Hz或144Hz显示器使用其广告刷新率
  17. opencv-python(cv2)——如何读取和保存中文路径图片(含代码)
  18. 模块一 day05 数据类型(上)
  19. 梦幻西游热门服务器卡顿延迟,梦幻西游:周末活动卡顿的最总原因,是人真的多还是服务器问题?...
  20. python---做一个恶搞程序

热门文章

  1. 环形队列(Python代码实现)
  2. stty raw透明模式设置
  3. js简单实现鼠标拖拽功能:盒子可以跟着鼠标移动位置
  4. C语言:Strlen()函数你了解多少?
  5. 【数据仓库-9】-- 数据仓库、数据集市和数据湖的区别
  6. 第十周CoreIDRAW
  7. 超级电脑牛人大全[转] 搞笑。。。
  8. 缓存一致性问题解决方案(超全超易懂)
  9. Druid+Oracle连接超时关闭问题
  10. LAMP兄弟连 51期 全体敬上