美文网首页
Spring_IOC_01——概念讲解

Spring_IOC_01——概念讲解

作者: _Zy | 来源:发表于2018-05-19 22:39 被阅读44次

IOC 概述

Spring框架最核心的思想之一就是 控制反转(IOC - Inversion Of Control)
IOC最常见的一种方式叫作 依赖注入(DI - Dependency Injection)

需要明确的是,控制反转并不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring容器来统一管理

理解IOC的关键在于,控制了什么?什么是反转?

  • 控制了什么:传统程序设计时,我们直接在程序内部通过new关键字进行创建对象,是程序主动去创建对象,而IOC是由一个专门的容器来统一创建并管理这些对象

  • 如何理解反转:要理解反转,首先我们要明确什么是正控。正控就是如果我们在使用对象时,由我们自己去负责对象的创建。也就是程序代码中显示的创建对象。而反转,则是需要依赖所在容器来创建及注入依赖的对象。反转了什么呢?获得依赖对象的过程被反转,对象的创建和销毁不再全部由程序控制,而由Spring容器来控制。

所以,字面上可以理解为:当一个对象创建时,程序所依赖的对象由外部传递给它,而非自己去创建所依赖的对象(比如通过new操作)。因此,也可以说在对象如何获取它的依赖这件事上,控制权被反转了。这便不难理解控制反转和依赖注入这两个名字的由来。


IOC 能做什么

简单举个栗子:
在传统的面向对象软件系统中,它的底层实现都是由多个对象组成的,彼此合作,最终实现业务逻辑。
Like This:

软件系统中耦合的对象

而加入了IOC容器后,容器可以实现对象间的解耦:把创建和查找依赖对象的控制权交给容器,由容器进行诸如和组合对象,所以对象之间是松散耦合,这样也方便于测试,同时也利于功能的复用,使得程序在整体结构上便得非常灵活。

IOC解耦过程

IOC很好的体现了面向对象的设计法则之一——好莱坞法则:Don't call me. I’ll call you.
即由IOC容器帮你找对象相应的依赖对象并注入,而不是由对象主动去找。

具体来说,调用方没有和某个具体的Service类耦合到一起,而是只依赖于抽象的接口,这样,上层业务就和底层服务解耦了。体现了面向对象的依赖倒置原则,也就是面向接口编程的设计理念。如果我要改用其他实现,那么无需对业务代码做改动,只需要修改注入的Bean就可以实现。这也是典型的开放—封闭原则的例子。


IoC 如何实现

最后我们简单说一下IoC是如何实现的。我们如果要实现一个依赖注入的功能,怎么做?其实就是如下三个步骤:

  • 1)扫描注解或者配置文件,拿到Bean依赖服务实现的具体类名。
  • 2)使用反射机制,基于雷鸣实例化对应对象的实例。
  • 3)将对象实例,注入到需要依赖的地方。(构造器,或者 setter 方法 )

会发现原理其实并不难,Spring也是这么做的。只是实现的功能更全面也更复杂。

在下一篇文章,将会讲解在Spring中,是如何实现IOC的,以及Spring IOC的高级特性。
Spring_IOC_02——原理解析



(如果有什么错误或者建议,欢迎留言指出)
(本文内容是对各个知识点的转载整理,用于个人技术沉淀,以及大家学习交流用)


参考资料:
张开涛——IOC基础
简书——Spring IOC详解
Spring的IOC原理(通俗解释)
源码解读Spring IOC原理

相关文章

  • Spring_IOC_04——Bean的作用域

    其他推荐:Spring_IOC_01——概念讲解Spring_IOC_02——原理解析Spring_IOC_03—...

  • Spring_IOC_01——概念讲解

    IOC 概述 Spring框架最核心的思想之一就是 控制反转(IOC - Inversion Of Contro...

  • Spring_IOC_02——原理解析

    如果对IOC的概念还不是很清楚,可以先阅读上一篇文章:Spring_IOC_01——概念讲解 Spring IOC...

  • 概念讲解之前传-因为没有,所以需要

    部分拆书家认为概念讲解很容易;部分拆书家认为概念讲解很难。我认为真正的概念讲解能力不容易练成。说容易的,估计大多是...

  • 讲解AOP相关概念

    Crocss Cutting Concern(横切性的关注点)— 是一种独立服务。遍布在系统的各个角落里,或者是处...

  • gradle常见概念讲解

    1、Gradle 项目的构建工具,管理一个项目的依赖架包,性质和maven相似 一个基于groovy的项目打包工具...

  • 概念讲解问题思考

    笔记思维,最近在整理笔记思维的时候,发现讲述的过程中存在一定的问题,脑子里会有一些东西,不过要讲个一个新人来听,还...

  • OpenGL相关概念讲解

    OpenGL(Open Graphics Library)是一个跨编程语言、跨平台的图形应用程序编程接口。他将计算...

  • Golang Gist

    概念讲解 基础概念 基础问答 基础问答 编码能力考查x

  • 太德财创 区块链创业史

    今天给大家讲解了永存链的概念。

网友评论

      本文标题:Spring_IOC_01——概念讲解

      本文链接:https://www.haomeiwen.com/subject/qraadftx.html