Spring_IOC_01——概念讲解

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原理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,188评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,464评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,562评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,893评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,917评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,708评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,430评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,342评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,801评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,976评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,115评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,804评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,458评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,008评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,135评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,365评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,055评论 2 355

推荐阅读更多精彩内容