Spring中控制反转最通俗理解

套用好莱坞的一句名言就是:你呆着别动,到时我会找你。

什么意思呢?就好比一个皇帝和太监

有一天皇帝想幸某个美女,于是跟太监说,今夜我要宠幸美女

皇帝往往不会告诉太监,今晚几点会回宫,会回哪张龙床,他只会告诉太监他要哪位美女

其它一切都交由太监去安排,到了晚上皇帝回宫时,自然会有美女出现在皇帝的龙床上

这就是控制反转,而把美女送到皇帝的寝宫里面去就是注射

太监就是是框架里面的注射控制器类BeanFactory,负责找到美女并送到龙床上去

整个后宫可以看成是spring框架,美女就是Spring控制下的JavaBean

而传统的模式就是一个饥渴男去找小姐出台

找领班,帮助给介绍一个云云,于是领班就开始给他张罗

介绍一个合适的给他,完事后,再把小姐还给领班,下次再来

这个过程中,领班就是查询上下文Context,领班的一个职能就是给客户找到他们所要的小姐

这就是lookup()方法,领班手中的小姐名录就是JNDI//Java Naming and Directory Interface

小姐就是EJB,饥渴男是客户端,青楼是EJB容器

看到区别了么?饥渴男去找小姐出台很麻烦,不仅得找,用完后还得把小姐给还回去

而皇帝爽翻了,什么都不用管,交给太监去处理,控制权转移到太监手中去了

而不是皇帝,必要时候由太监给注射进去就可以了

看到Spring的美妙了吧,Spring还提供了与多个主流框架的支持

可以和其它开源框架集成

IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也

就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

USB接口例子:

笔记本电脑与外围存储设备通过预先指定的一个接口(USB)相连,对于笔记本而言,

只是将用户指定的数据发送到USB接口,而这些数据何去何从,则由当前接入的USB设备决定。在USB

设备加载之前,笔记本不可能预料用户将在USB接口上接入何种设备,只有USB设备接入之后,这种设

备之间的依赖关系才开始形成。

对应上面关于依赖注入机制的描述,在运行时(系统开机,USB 设备加载)由容器(运行在笔记本

中的Windows操作系统)将依赖关系(笔记本依赖USB设备进行数据存取)注入到组件中(Windows

文件访问组件)。

理解:

传统模式中是类和类之间直接调用,所以有很强的耦合度,程序之间的依赖关系比较强,后期维护时牵扯的比较多。

IOC,用配置文件(XML)来描述类与类之间的关系,由容器来管理,降低了程序间的耦合度,程序的修改可以通过简单的配置文件修改来实现

面向切面编程AOP

Aspect Oriented Programming(面向切面编程),可以 通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一 添加功能的一种技术。

6.2.1  IOC原理

IoC,直观地讲,就是容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。IoC还有另外一个名字——“依赖注入(Dependency Injection)”。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象地说,即由容器动态地将某种依赖关系注入到组件之中。

下面通过一个生动形象的例子介绍控制反转。

比如,一个女孩希望找到合适的男朋友,如图6-2所示,可以有3种方式,即青梅竹马、亲友介绍、父母包办。

时间: 2024-10-13 01:42:38

Spring中控制反转最通俗理解的相关文章

spring之控制反转

IOC (Inversion of Control) 控制反转 我的理解:将创建对象的控制权从代码本身转交给了外部容器(spring容器). 1.将组件对象(业务对象)的控制权从代码本身转移到外部容器. 在代码中不使用关键字new来构建一个业务实例,而是在配置文件中.通过xml节点知道容器如何对内存中构建的对应类型的对象名称做命名. DI依赖注入(Dependency Injection) DI依赖注入:创建对象实例时,为这个对象注入属性值或其它对象实例(域属性). <!-- ioc--> &

spring IOC控制反转和DI依赖注入

spring framework 的doc地址:https://docs.spring.io/spring/docs/current/spring-framework-reference/ spring framework 作为一个优秀的开源框架,其高扩展和高可用性毋庸置疑.这篇文章记录spring framework的控制反转. 1.什么叫控制反转:在系统开发中我们要创建一个实例常见的做法就是new 一个对象(当然也还有其他创建实例的方法,eg 反射,工厂模式),这种通过程序员手动创建实例的行

Spring理论基础-控制反转和依赖注入

序第一次了解到控制反转(Inversion of Control)这个概念,是在学习Spring框架的时候.IOC和AOP作为Spring的两大特征,自然是要去好好学学的.而依赖注入(Dependency Injection,简称DI)却使得我困惑了挺久,一直想不明白他们之间的联系.控制反转控制反转顾名思义,就是要去反转控制权,那么到底是哪些控制被反转了?在2004年 Martin fowler 大神就提出了 "哪些方面的控制被反转了?" 这个问题,他总结出是依赖对象的获得被反转了.在

对Spring中IOC和DI的理解

前几篇讲了Spring中IOC和DI的用法,本篇应该放到三篇之前,但一直没有想到好的讲解方式,后参考https://blog.csdn.net/luoyepiaoxue2014/article/details/72426666博客,对其中涉及到的进行了简单的总结. 在学习Spring的过程中,总会涉及到两个概念---IOC和DI,即控制反转和依赖注入,而对这两个概念的理解也总是含糊不清的,下面就对自己的理解进行总结. 首先是IOC,即控制反转,需要理解的是:怎么控制?谁控制了什么?怎么反转?既然

SSH学习八 Spring框架 -- 控制反转实现Ioc

Spring的核心是控制反转(IoC)和面向切面(AOP)控制反转--Spring通过一种称作控制反转(IoC)的技术促进了低耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JNDI相反--不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它. (以上来自百度百科 http://baike.baidu.com/link?url=_egsZcZDKcHvLJtDqFTZIR3e6lH1G-p

Spring对于控制反转的误解

 原文的片段: 几位轻量级容器的作者曾骄傲地对我说:这些容器非常有用,因为它们实现了"控制反转".这样的说辞让我深感迷惑:控制反转是框架所共有的特征,如果仅仅因为使用了控制反转就认为这些轻量级容器与众不同,就好象在说"我的轿车是与众不同的,因为它有四个轮子". 问题的关键在于:它们反转了哪方面的控制?我第一次接触到的控制反转针对的是用户界面的主控权.早期的用户界面是完全由应用程序来控制的,你预先设计一系列命令,例如"输入姓名"."输

spring IOC控制反转 DI注入

<!-- 初始化 init-method="init" 销毁destroy-method="destory" --> <!--懒加载 lazy-init="true" --> <bean id="IUDao" class="dao.IUDao" scope="singleton" init-method="init" destroy-me

Spring IOC(控制反转)示例解析

控制反转--Spring通过一种称作控制反转(IoC)的技术促进了低耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JNDI相反--不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它. 首先用简单代码做一个简单示例来介绍一下什么事控制反转. 1.做一个叫JavaWork的测试类,其中有doTest()方法.(当然,是需要有人来做测试啦,所以看第二步) 2.有一个人,张三,他来做测试这个工

spring(3)------控制反转(IOC)/依赖注入(DI)

一,spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理. 所谓的"控制反转"概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器. 没有控制反转这种模式前,你创建一个对象,在什么地方用,你得单独通过关键字new出来用, 但现在可以不用这样,你把new对象的权利交给spring配置文件,通过配置文件来'new', 就是权利的反转,你以前干的事