控制反转

一、简介

​ 控制反转(Inversion of Control,缩写为IoC),是面向对象编程的一种设计原则,可以用来减低计算机代码之间的耦合度。

​ 常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫依赖查找。

​ 通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

二、技术描述

Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。

采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。而具体获取的方法、对象被获取时的状态由配置文件(如XML)来指定。

三、依赖注入

当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入

依赖注入有两种:设值注入、构造注入

所谓依赖注入指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。

Spring之控制反转相关推荐

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

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

  2. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 在这里插入图片描述 案例 如 ...

  3. java-12:spring MVC - 控制反转IOC,依赖注入DI

    学习spring框架之前,先理解几个概念: 1.第一部分:依赖倒置原则 2.第二部分:控制反转,控制反转容器(实例) 3.第三部分:控制反转,控制反转容器(全面理解,面试题) 综合性理解:控制反转(I ...

  4. Spring 的控制反转/依赖注入

    第一章 Spring 的控制反转/依赖注入 回顾 增删改查. 课前测: 本章内容 spring:春天 IOC:将创建对象的权力交给 spring 核心容器去控制.工厂模式 BeanFactory: 懒 ...

  5. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 案例 如果按照之前javaw ...

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

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

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

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

  8. Spring IOC(控制反转)详解及示例

    控制反转--Spring通过一种称作控制反转(IOC)的技术促进了低耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JN ...

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

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

  10. java之Spring实现控制反转

    先来复习一下多态吧,简单点讲,就是一个类的引用可以指向其本身以及其子类的对象. Like these: FatherClass a = new FatherClass(); FatherClass a ...

最新文章

  1. 只有20%的iOS程序员能看懂:详解intrinsicContentSize 及 约束优先级/content Hugging/content Compression Resistance
  2. hellowolrd 的系统调用
  3. 《虚拟化与云计算》推荐序二
  4. 对网页是否为当前展示标签页、是否最小化、以及是否后台运行进行监听
  5. ways of make process to background job
  6. OkHttp实现文件上传进度
  7. Windows下Qt5搭建Android开发环境笔记
  8. SP22343 NORMA2 - Norma(分治优化复杂度)
  9. ubuntu10.04+hadoop0.20.2平台配置(完全分布式模式)
  10. P3165 [CQOI2014]排序机械臂
  11. 学校图书馆座位预约系统微信小程序开发制作介绍
  12. 深度学习在图像识别上的应用
  13. 使 div 水平 垂直 居中
  14. Goland中time.Timer and time.Ticker
  15. 如何使用计算机网络打印机,电脑重新连接网络打印机的操作方法-电脑自学网...
  16. 物联网+区块链溯源方案
  17. SourceTree使用配置
  18. 黑马程序员中的简单网页制作
  19. 使用在线UML制作工具Freedgo Design设计uml例子
  20. 基于javaweb的商品进销存系统(java+vue+springboot+mybatis+mysql)

热门文章

  1. 移动端网站建设的模式选择
  2. Labelme安装以及使用教程
  3. 计算机教学形式有哪些类型,教学方法有哪些
  4. mysql orderby 规则_MySQL中OrderBy多字段排序规则代码示例
  5. 佳能mov覆盖的恢复和修复方法
  6. ASp.net验证控件RegularExpressionValidator
  7. 江苏省委党校在云创举办实践培训会议
  8. vim编译器替换命令
  9. Android 模拟器启动失败(SDL_app:emulator.exe )解决方法
  10. 蛋糕做出新高度,投资不高却收入“甜蜜”,他们怎样做的?