Ioc(Inversion of Control)和DI(Dependency Injection)的全称分别是控制反转和依赖注入。

如何理解这两个概念呢?

Ioc

Ioc(控制反转)实际上就说把对象的生命周期托管到Spring容器中,而反转是指对象的获取方式被反转了,这个概念可能不是很好理解,咱们通过两张图来了解一下Ioc的作用。

图1表示的传统意义上对象的创建方式,客户端如果需要用到User及UserDetail,需要通过new来构建,这种方式会使代码之间的耦合度非常高。

当使用Spring Ioc容器之后,客户端类不需要再通过new来创建这些对象,如图2所示,在图1的基础上增加Ioc容器后,客户端类获得User及UserDetail对象实例时,不再通过new来构建,而是从Ioc容器中获得。那么Spring Ioc容器中的对象是什么时候构建的呢?

在早期的Spring中,主要通过XML的方式来定义Bean,Spring会解析XML文件,把定义的Bean装载到Ioc容器中。

图1

图2

通过Ioc容器来管理Bean的生命周期

DI

DI(Dependency Inject),也就是依赖注入,简单理解就是Ioc容器在运行期间,动态的吧某种依赖关系注入到组建中。为了彻底搞明白DI的概念,我们继续看一下图2,

在Spring配置文件中描述了两个Bean,分别是User和UserDetail,这两个对象从配置文件上来看是没有任何关系的,但实际上从类的关系图来看,它们之间存在聚合关系。如果我们希望这个聚合关系在Ioc容器中自动完成注入,也就是像这段这代码一样,通过User.getUserDetail来获得UserDetail实例,该怎么做呢?

AppcationContext context = new FileSystemXmlAppcationContext(".....");
User user = context.getBean(User.class);
UserDeail userDeail = user.getUserDeail();

其实很简单,我们只需要在Spring的配置文件中描述Bean之间的依赖关系,Ioc容器在解析该配置文件的时候,会根据Bean的依赖关系进行注入,这个过程就是依赖注入。

<Bean id="user" class="User"><property name="userDetail" ref="userDetail" />
</Bean><Bean id="userDetail" class="UserDetail"></Bean> 

实现依赖注入的方式有三种,分别是接口注入、构造方法和setter方法注入。不过现在基本上都基于注解的方式来描述Bean之间的依赖关系,比如@Autowired、@Inject和@Resourse

但是不管形式怎么变化,本质上都是一样的。

Spring Ioc/DI 控制反转和依赖注入相关推荐

  1. Spring_mvc ioc/DI 控制反转与依赖注入

    主要步骤: 1.   提交页面:一个查看商品的链接      结果页面:商品列表,显示三件商品的具体信息 2.   实体类:商品名称,价格 3.   后台控制类Servlet和配置 4.   添加sp ...

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

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

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

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

  4. spring中的控制反转和依赖注入之间的关系

    Spring中的控制反转:把new这一个过程交给了spring容器去处理. 控制反转就是将new对象这一个过程交给外部去做(即Spring)而不是自己去创建. 图中的1"控制正转" ...

  5. IOC和DI 控制反转和依赖注入

    首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/b ...

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

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

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

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

  8. Spring中控制反转和依赖注入

    Spring之IOC控制反转和DI依赖注入 1.控制反转是什么? IOC控制反转,所谓反转是指使用方本身不负责依赖对象的创建和维护,而将对象的管理(创建.维护.销毁)都交给Spring容器管理,在使用 ...

  9. java json injection_Java Web实现IOC控制反转之依赖注入

    控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般分为两种类型,依赖注入 ...

最新文章

  1. 几则与西门子相关的消息
  2. 女生参加web前端培训可以吗
  3. 如何有效地提升 JavaScript 水平?
  4. java freememory 单位_Runtime类中的freeMemory,totalMemory,maxMemory区别
  5. mysql blob 内容查看_这些被你忽视的MySQL细节,可能会让你丢饭碗!
  6. 阿里云上git clone公司内网仓库遇到的错误消息 - cannot resolve host
  7. angularjs的$http请求方式
  8. Django之Apache2部署
  9. 几种常见机器学习距离公式
  10. VBS 控制 Windos 系统音量 及视频播放
  11. python yield详解
  12. 黑塞矩阵 Hessian Matrix
  13. intel无线网卡的型号和驱动一览
  14. Ubuntu 18.04 LTS 安装64位 iNode 客户端
  15. 剑指offer做题记录
  16. Oblivious Data Structures学习笔记
  17. 数据库之关系数据库之超码,候选码,主码,主属性,非主属性(非码属性)之间的关系
  18. Vue+Element 实现订单列表【管理端】02
  19. 可怜了,这帮苦逼的人肉运维,还有...
  20. 调用MapReduce进行词频统计

热门文章

  1. CTF writeup 2_南邮网络攻防训练
  2. 绘画系统(05):【类】QPaintEngine[官翻]
  3. chapter1:逆向工程之学习——静态分析
  4. mysql死锁语句_Mysql死锁
  5. 原生JS实现鼠标按下拖拽效果
  6. 深入MySQL死锁场景
  7. STM32系列(HAL库)——F103C8T6硬件SPI点亮带字库OLED屏
  8. 会员管理小程序实战开发02-数据源介绍
  9. COMFORT 美食 | 贴秋膘好去处 深秋米其林黑珍珠星级餐厅打卡指南
  10. Arduino abs() 绝对值函数使用