我想这下你应该知道什么叫控制反转

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

什么叫控制反转(IoC)IOC(InversionofControl)控制反转模式,意味着去除所有有该类产生但不由该类直接负责的对象实例,而改由外界传入。由简单的对象开发模式到IOC(控制翻转)1.依赖注入(DependencyInjection)组件之间的依赖关系有容器在运行时期决定。2.控制反转(IoC.InversionofControlContainers)控制权由应用代码中转移到外部容器,控制权的转移。IoC,翻译成中文有人叫控制反转,听起来很别别扭,其实就是依赖关系的转移,通过XML配置文件由容器来管理类,而不是在类中直接生成Bean的实例。网上一个大牛人对IoC的形象比喻:套用好莱坞的一句名言就是:你呆着别动,到时我会找你。什么意思呢?就好比一个皇帝和太监有一天皇帝想幸某个美女,于是跟太监说,今夜我要宠幸美女皇帝往往不会告诉太监,今晚几点会回宫,会回哪张龙床,他只会告诉太监他要哪位美女其它一切都交由太监去安排,到了晚上皇帝回宫时,自然会有美女出现在皇帝的龙床上这就是控制反转(IoCInversionofControl),而把美女送到皇帝的寝宫里面去就是注射(DIdependenceInversion)太监就是是框架里面的注射控制器类BeanFactory,负责找到美女并送到龙床上去整个后宫可以看成是Spring框架,美女就是Spring控制下的JavaBean而传统的模式就是一个饥渴男去找小姐出台找领班,帮助给介绍一个云云,于是领班就开始给他张罗介绍一个合适的给他,完事后,再把小姐还给领班,下次再来这个过程中,领班就是查询上下文Context,领班的一个职能就是给客户找到他们所要的小姐这就是lookup()方法,领班手中的小姐名录就是JNDI//JavaNamingandDirectoryInterface小姐就是EJB,饥渴男是客户端,青楼是EJB容器看到区别了么?饥渴男去找小姐出台很麻烦,不仅得找,用完后还得把小姐给还回去而皇帝爽翻了,什么都不用管,交给太监去处理,控制权转移到太监手中去了而不是皇帝,必要时候由太监给注射进去就可以了看到Spring的美妙了吧,Spring还提供了与多个主流框架的支持可以和其它开源框架集成---------------------------------------------控制反转模式是当今J2EE架构中常用到的模式之一,它符合好莱坞法则:不要调用我,我会调用你。在没有运用IOC的时候,我们一般都是通过工厂来管理对象,当我们需要一个对象的时候,我们通过工厂来创建它,这样就造成了业务代码和工厂的耦合,并且更重要的是需要我们自己来管理对象的生命周期,这样非常繁琐,所以如果我们运用IOC的话,不仅可以解除业务代码与工厂的耦合,而且不用我们进行生命周期管理,大大的减少了编码的工作量。如何实现IOC,现在大概有以下两种方式:第一:查找实现。此种实现方法需要一个注册表,当我们需要什么对象的时候,我们就去注册表里查找,不需要自己去创建。因为需要的对象是框架或者是容器帮我们管理的,这时就不需要我们来负责对象的生存周期等的问题。所以生存周期管理也就成了一个容器的必备的能力之一。比如EJB,它就是通过JNDI来查找我们需要的对象的。这样虽然使得我们不需要管理对象的生命周期,但是同时我们的业务代码还是和具体的注册表API相耦合,所以此种办法没有完全解耦。为了实现完全的POJO编程模型,需要采用以下的IOC方式(DI)。第二:依赖注射(DI),目前比较流行的是此种实现。依赖注射要求我们只需要声明要用到什么样子的对象,然后设置JavaBean的setter方法就OK了,在我们需要用到对象的时候,容器会帮助我们把需要的对象设置进来。或者也可以通过有参构造器来进行注射,通过依赖注射,我们的业务代码就不需要与具体的容器或者是框架耦合,我们可以完全采用POJO的编程模型。因为我们的业务代码没有与任何的容器相耦合,这样就可以使得代码可以在容器内或者容器外都可以运行,从而提高了复用性和可移植性,同时我们的测试也很容易实现。由此可见IOC给我们的开发带来的是革命性的变化。使得我们的业务代码与具体的容器的耦合度降到了最低的同时,也给我们的测试工作带来了便利。

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功