3.1 IoC 概述
IoC(控制反转:Inverse of Control)是Spring 容器的内核,AOP、声明式事务等功能
在此基础上开花结果。但是IoC 这个重要的概念却比较晦涩隐讳,不容易让人望文生义,
这不能不说是一大遗憾。不过IoC 确实包括很多内涵,它涉及代码解耦、设计模式、代码
优化等问题的考量,我们打算通过一个小例子来说明这个概念。
3.1.1 通过实例理解IoC 的概念
贺岁大片在中国已经形成了一个传统,每到年底总有多部贺岁大片纷至沓来让人应接
不暇。在所有贺岁大片中,张之亮的《墨攻》算是比较出彩的一部。该片讲述了战国时期
墨家人革离帮助梁国反抗赵国侵略的个人英雄主义故事,恢宏壮阔、浑雄凝重的历史场面
相当震撼。其中有一个场景:当刘德华所饰演的墨者革离到达梁国都城下,城上梁国守军
问到:“来者何人?”刘德华回答:“墨者革离!”我们不妨通过一个Java 类为这个“城门
叩问”的场景进行编剧,并借此理解IoC 的概念:
代码清单 3-1 MoAttack:通过演员安排剧本
public class MoAttack {
public void cityGateAsk(){
//①演员直接侵入剧本
LiuDeHua ldh = new LiuDeHua();
ldh.responseAsk("墨者革离!");
}
}
我们会发现以上剧本在①处,作为具体角色饰演者的刘德华直接侵入到剧本中,使剧
本和演员直接耦合在一起。
一个明智的编剧在剧情创作时应围绕故事的角色进行,而不应考虑角色的具体饰演
者,这样才可能在剧本投拍时自由地遴选任何适合的演员,而非绑定在刘德华一人身上。
通过以上的分析,我们知道需要为该剧本主人公革离定义一个接口:
代码清单 3-2 MoAttack:引入剧本角色
public class MoAttack {
public void cityGateAsk(){
//①引入革离角色接口
GeLi geli = new LiuDeHua();
//②通过接口开展剧情
geli.responseAsk("墨者革离!");
}
}
可是,我们可以看出MoAttack 同时依赖于GeLi 接口和LiuDeHua 类,
并没有达到我们所期望的剧本仅依赖于角色的目的。但是角色最终必须通过具体的演员才
能完成拍摄,如何让LiuDeHua 和剧本无关而又能完成GeLi 的具体动作呢?当然是在影片
投拍时,导演将LiuDeHua 安排在GeLi 的角色上,导演将剧本、角色、饰演者装配起来。
通过引入导演,使剧本和具体饰演者解耦了。对应到软件中,导演像是一个装配器,
安排演员表演具体的角色。
现在我们可以反过来讲解IoC 的概念了。IoC(Inverse of Control)的字面意思是控制
反转,它包括两个内容:
其一是控制
其二是反转
那到底是什么东西的“控制”被“反转”了呢?对应到前面的例子,“控制”是指选
择GeLi 角色扮演者的控制权;“反转”是指这种控制权从《墨攻》剧本中移除,转交到导
演的手中。对于软件来说,即是某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定。
分享到:
相关推荐
Spring IOC 控制反转简单过程 1: 导入需要报 2:构建spring的配合文件 3: 将我们创建的类交给spring容器管理 4: 实例化容器 5: 从容器中获取实例
spring IOC控制反转 spring IOC控制反转 spring IOC控制反转
spring ioc控制反转简单测试代码
springIOC 小例子 附带源码 适合新手学习
在Spring中使用Ioc控制反转,里面的底层实现原理,以及实现过程~
Java仿Spring框架IOC控制反转利用反射简单实现(源码) Java仿Spring框架IOC控制反转利用反射简单实现(源码)
Spring框架IoC控制反转
spring技术--IOC控制反转课件.ppt
spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合
spring ioc控制反转demo包含两种实现方式
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找...
学习Spring前比较又用的一个SPring基础框架
IOC与DI的理解及使用 控制反转IOC(Inversion of Control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法 。... 在Spring中实现控制反转的是IOC容器 ,其 实现方法是依赖注入 (Dependency Injection,DI)
Spring.NET 控制反转(Inversion of Control,英文缩写为IoC),也叫依赖注入(Dependency Injection)。我个人认为控制反转的意思是依赖对象(控制权)发生转变,由最初的类本身来管理依赖对象转变为IoC框架来管理...
Spring核心学习IOC部分:从最简单的BeanFactory开始一步步完善类似Spring的功能
Spring IOC原理,类的继承关系,依赖注入和控制反转等关系
web开发技术spring框架控制反转思想IOC学习笔记,并对java的静态代理和动态代理进行了相关叙述
Spring框架学习中的核心,控制反转IOC,理解Spring框架主要注入所依赖的资源,解耦开发