IOC(Inversion of
Control)控制反转模式,意味着去除所有有该类产生但不由该类直接负责的对象实例,而改由外界传入。
由简单的对象开发模式到IOC(控制翻转)
1. 依赖注入(Dependency Injection)
组件之间的依赖关系有容器在运行时期决定。
2. 控制反转(IoC. Inversion of Control Containers)
控制权由应用代码中转移到外部容器,控制权的转移。
IoC,翻译成中文有人叫控制反转,听起来很别别扭,其实就是依赖关系的转移,通过XML配置文件由容器来管理类,而不是在类中直接生成Bean的实例。
网上一个大牛人对IoC的形象比喻:
套用好莱坞的一句名言就是:你呆着别动,到时我会找你。
什么意思呢?就好比一个皇帝和太监
有一天皇帝想幸某个美女,于是跟太监说,今夜我要宠幸美女
皇帝往往不会告诉太监,今晚几点会回宫,会回哪张龙床,他只会告诉太监他要哪位美女
其它一切都交由太监去安排,到了晚上皇帝回宫时,自然会有美女出现在皇帝的龙床上
这就是控制反转(IoC Inversion of Control),而把美女送到皇帝的寝宫里面去就是注射(DI dependence
Inversion)
太监就是是框架里面的注射控制器类BeanFactory,负责找到美女并送到龙床上去
整个后宫可以看成是Spring框架,美女就是Spring控制下的JavaBean
而传统的模式就是一个饥渴男去找小姐出台
找领班,帮助给介绍一个云云,于是领班就开始给他张罗
介绍一个合适的给他,完事后,再把小姐还给领班,下次再来
这个过程中,领班就是查询上下文Context,领班的一个职能就是给客户找到他们所要的小姐
这就是lookup()方法,领班手中的小姐名录就是JNDI//Java Naming and Directory
Interface
小姐就是EJB,饥渴男是客户端,青楼是EJB容器
看到区别了么?饥渴男去找小姐出台很麻烦,不仅得找,用完后还得把小姐给还回去
而皇帝爽翻了,什么都不用管,交给太监去处理,控制权转移到太监手中去了
而不是皇帝,必要时候由太监给注射进去就可以了
看到Spring的美妙了吧,Spring还提供了与多个主流框架的支持
可以和其它开源框架集成
---------------------------------------------
控制反转模式是当今J2EE架构中常用到的模式之一,它符合好莱坞法则:不要调用我,我会调用你。在没有运用IOC的时候,我们一般都是通过工厂来管理对
象,当我们需要一个对象的时候,我们通过工厂来创建它,这样就造成了业务代码和工厂的耦合,并且更重要的是需要我们自己来管理对象的生命周期,这样非常繁
琐,所以如果我们运用IOC的话,不仅可以解除业务代码与工厂的耦合,而且不用我们进行生命周期管理,大大的减少了编码的工作量。如何实现IOC,现在大
概有以下两种方式:
第一:查找实现。此种实现方法需要一个注册表,当我们需要什么对象的时候,我们就去注册表里查找,不需要自己去创建。因为需要的对象是框架或者是容器帮我
们管理的,这时就不需要我们来负责对象的生存周期等的问题。所以生存周期管理也就成了一个容器的必备的能力之一。比如EJB,它就是通过JNDI来查找我
们需要的对象的。这样虽然使得我们不需要管理对象的生命周期,但是同时我们的业务代码还是和具体的注册表API相耦合,所以此种办法没有完全解耦。为了实
现完全的POJO编程模型,需要采用以下的IOC方式(DI)。
第二:依赖注射(DI),目前比较流行的是此种实现。依赖注射要求我们只需要声明要用到什么样子的对象,然后设置JavaBean的setter方法就
OK了,在我们需要用到对象的时候,容器会帮助我们把需要的对象设置进来。或者也可以通过有参构造器来进行注射,通过依赖注射,我们的业务代码就不需要与
具体的容器或者是框架耦合,我们可以完全采用POJO的编程模型。因为我们的业务代码没有与任何的容器相耦合,这样就可以使得代码可以在容器内或者容器外
都可以运行,从而提高了复用性和可移植性,同时我们的测试也很容易实现。由此可见IOC给我们的开发带来的是革命性的变化。使得我们的业务代码与具体的容
器的耦合度降到了最低的同时,也给我们的测试工作带来了便利。
分享到:
相关推荐
Autofac Ioc C# Demo 控制反转 简单例子,控制反转 ,使程序更容易些换接口,易扩展。
Spring IOC 控制反转简单过程 1: 导入需要报 2:构建spring的配合文件 3: 将我们创建的类交给spring容器管理 4: 实例化容器 5: 从容器中获取实例
Ioc(控制反转)的C#例子,包括相关的例子源码
spring IOC控制反转 spring IOC控制反转 spring IOC控制反转
NULL 博文链接:https://ysj5125094.iteye.com/blog/1606928
本文介绍了Spring框架中的控制反转IOC和依赖注入DI,欢迎阅读,共同学习,一起进步。 Spring框架基础参考:深入学习Spring基础 文章目录一.入门程序和IOC简介二.IOC-控制反转三.DI-依赖注入四. IOC和DI五.Spring...
IOC控制反转在代码中体现.
本文文档中有 控制反转 DI依赖注入,希望可以给大家在技术上有一点的帮助
控制反转IOC(Inversion of Control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法 。在没有IOC的程序中,我们使用面向对象编程,对象的创建于对象间的依赖完全硬编码在程序中,对象的创建有程序自己控制;...
详细讲解ioc控制反转机制,供大家深入了解ioc机制
spring ioc控制反转简单测试代码
Spring框架学习中的核心,控制反转IOC,理解Spring框架主要注入所依赖的资源,解耦开发
spring技术--IOC控制反转课件.ppt
Spring.NET 控制反转(Inversion of Control,英文缩写为IoC),也叫依赖注入(Dependency Injection)。我个人认为控制反转的意思是依赖对象(控制权)发生转变,由最初的类本身来管理依赖对象转变为IoC框架来管理...
在Spring中使用Ioc控制反转,里面的底层实现原理,以及实现过程~
.net autofac 与IOC控制反转来调用数据库事例,让大家可以一目了然的了解怎么使用,方便大家提高工作效率,特意奉献出来
Spring框架IoC控制反转
① IoC(Inverse of Control)–> 控制反转 IoC理念: 对象的创建工作交给IoC容器 对象间的依赖关系交给IoC容器查找,在运行期间确定 依赖注入是IoC的主要实现方式 IoC的实现机制: 工厂模式 + 反射机制:工厂模式...
在Java开发中,IoC意 味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。下文给大家介绍Java面试和开发中的IoC(控制反转)知识,需要的朋友参考下吧
首先我们来吹吹牛,什么叫IoC,控制反转(Inversion of Control,英文缩写为IoC),什么意思呢? 就是你一个类里面需要用到很多个成员变量,传统的写法,你要用这些成员变量,那么你就new 出来用呗~~ IoC的原则是:...