IoC之IoC基础

上文提到Spring的核心是IoC和AOP,今天开始学习核心之一的IoC,同样是带着IoC是什么,为什么,怎么用来学习IoC

IoC是什么

先看看IoC的全名是什么。IoC——Inversion of Control,即“控制反转”。这个可不是什么技术,就是一个思想(思想很重要,这个你进步最重要的标志,我们可不能只知道怎么用,却不知道为什么要这么用)。传统程序开发中在对象内部直接控制,有了IoC意味着将设计好的对象交给容器控制。要想更好的理解IoC,需要更加深刻的理解一下“控制反转”。我们把这个问题拆分成两个部分来看,“控制”+“反转”。“控制”关系的问题是“谁控制谁,控制什么”;“反转”关系的问题是“为什么是反转,有反转是不是就应该有正转,反转什么”。我们慢慢往下看

谁控制谁,控制什么

在传统程序开发中,是通过new来创建对象,程序主动创建依赖关系;而IoC是通过专门的容器来创建对象,即由IoC容器来控制对象的创建;

  • 谁控制谁:当然是IoC容器控制对象
  • 控制什么:控制外部资源获取(不仅仅是对象还有文件等)

为什么是反转,反转了什么

有反转就有正转,传统程序开发中由我们自己在对象中主动控制去直接获取依赖对象,就是正转;IoC通过容器来创建及注入依赖对象就是反转;为什么是反转?由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;反转了什么?依赖对象的获取被反转了。
正转是主动创建相关对象再组合
在这里插入图片描述
有了IoC和DI的容器,在客户端不需要主动去创建这些对象了。
在这里插入图片描述

IoC能做什么

IoC不是一种技术,而是一种思想,一个面向对象编程的法则,可以让我设计出松耦合的程序。传统应用程序是在类内部主动创建依赖对象,导致类和类之间的高耦合,难于测试;IoC将对象的创建和查找依赖交给容器,由容器进行注入组合的对象,所以对象和对象之间是松耦合,方便测试,利用功能的复用。最重要的是使程序的整个体系结构变的非常灵活。
IoC对编程带来最大的变化就是思想,应用程序原来是老大,想要获得什么就主动去取,而在IoC/DI思想中,应用程序就编程被动的,想获得什么,需要被动等IoC容器来创建并注入需要的资源。
IoC最大的变化就是不是应用程序想要什么就自己去找什么,而是必须通过IoC容器帮对象找相应依赖关系注入。

IoC和DI的关系

IoC和DI其实就是一个概念,只是从不同角度的描述。IoC含义比较模糊,理解为容器控制对象这一层面;DI更清楚的描述了被注入对象依赖IoC容器配置依赖对象。
DI——Dependency Injection,即“依赖注入”:由容器动态的将某个依赖关系注入到组件当中。依赖注入并不为了提高程序的更多功能,而是为了提升组件重用的频率,并未系统搭建一个灵活、可扩展的平台。通过依赖注入机制,可以通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,不需要关系资源来自何处,由谁实现。需要更深理解DI同样拆分成“依赖”和“注入”来看。“依赖”需要明白“谁依赖谁,为什么要依赖”;“注入”需要明白“谁注入谁,注入了什么”

谁依赖谁,为什么要依赖

“谁依赖谁”:当然是容器管理的对象依赖IoC容器;“被注入对象的对象”依赖于“依赖对象”;
“为什么要依赖”:容器管理对象需要IoC容器来提供对象需要的外部资源

谁注入谁,注入了什么

“谁注入谁”:很明显IoC注入某个对象,也就是注入“依赖对象”
“注入了什么”:注入某个对象所需要的外部资源(包括对象、资源、常量数据)

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值