第1组web-IoC_第1页
第1组web-IoC_第2页
第1组web-IoC_第3页
第1组web-IoC_第4页
第1组web-IoC_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 IoC/DI第一小组:吴婷 沙银银 王佳莹 杨影西 王华东 李红波 王彦博 特林 白培翔 耿雪来 CONTENTSIoC概念及所包含的设计思想12目录依赖注入的类型 依赖倒置原则(DIP) 控制反转(IoC) 依赖注入(DI) IoC容器3IoC总结 属性注入 构造函数注入 接口注入 IOC为我们带来了什么好处 IOC容器的一些产品01IoC概念及所包含的设计思想Bob Martins对DIP的定义:高层模块不应依赖于低层模块,两者应该依赖于抽象。抽象不应该依赖于实现,实现应该依赖于抽象。IoC概念及所包含的设计思想依赖倒置原则,它转换了依赖,高层模块不依赖于低层模块的实现,而低层模块依赖于

2、高层模块定义的接口。依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念)。IoC概念及所包含的设计思想相信大部分取过钱的朋友都深有感触,只要有一张卡,随便到哪一家银行的ATM都能取钱。在这个场景中,ATM相当于高层模块,而银行卡相当于低层模块。ATM定义了一个插口(接口),供所有的银行卡插入使用。也就是说,ATM不依赖于具体的哪种银行卡。它只需定义好银行卡的规格参数(接口),所有实现了这种规格参数的银行卡都能在ATM上使用。现实生活如此,软件开发更是如此。通俗的讲,就是高层模块定义接口,低层模块负责实现。IoC概念及所包含的设计思想场景一 依赖无倒置低层模块定义接口,高层模块负责实现从上

3、图中,我们发现高层模块的类依赖于低层模块的接口。因此,低层模块需要考虑到所有的接口。如果有新的低层模块类出现时,高层模块需要修改代码,来实现新的低层模块的接口。这样,就破坏了开放封闭原则。IoC概念及所包含的设计思想场景二 依赖倒置高层模块定义接口,低层模块负责实现在这个图中,我们发现高层模块定义了接口,将不再直接依赖于低层模块,低层模块负责实现高层模块定义的接口。这样,当有新的低层模块实现时,不需要修改高层模块的代码。IoC概念及所包含的设计思想由此,我们可以总结出使用DIP的优点:系统更柔韧:可以修改一部分代码而不影响其他模块。系统更健壮:可以修改一部分代码而不会让系统崩溃。系统更高效:组

4、件松耦合,且可复用,提高开发效率。IoC概念及所包含的设计思想DIP是一种 软件设计原则,它仅仅告诉你两个模块之间应该如何依赖,但是它并没有告诉如何做。IoC则是一种 软件设计模式,它告诉你应该如何做,来解除相互依赖模块的耦合。通过上面的例子我们可以看到,ATM它自身并没有插入具体的银行卡(工行卡、农行卡等等),而是将插卡工作交给人来控制,即我们来决定将插入什么样的银行卡来取钱。同样我们也通过软件开发过程中场景来加深理解。软件设计模式:模式是在软件开发过程中总结得出的一些可重用的解决方案,它能解决一些实际的问题。一些常见的模式,比如工厂模式、单例模式等等。IoC概念及所包含的设计思想控制反转(

5、IoC),它为相互依赖的组件提供抽象,将依赖(低层模块)对象的获得交给第三方(系统)来控制,即依赖对象不在被依赖模块的类中直接通过new来获取。控制反转(IoC):一种反转流、依赖和接口的方式(DIP的具体实现方式)。IoC概念及所包含的设计思想举例 订单入库IoC概念及所包含的设计思想举例 订单入库IoC概念及所包含的设计思想举例 订单入库换成Access数据库,需要新定义一个AccessDal类,负责Access数据库的操作。IoC概念及所包含的设计思想控制反转(IoC)一种重要的方式,就是将依赖对象的创建和绑定转移到被依赖对象类的外部来实现。在上述的实例中,Order类所依赖的对象Sql

6、ServerDal的创建和绑定是在Order类内部进行的。事实证明,这种方法并不可取。既然,不能在Order类内部直接绑定依赖关系,那么如何将SqlServerDal对象的引用传递给Order类使用呢?因为 IoC 确实不够开门见山,因此业界曾进行了广泛的讨论,最终软件界的泰斗级人物 Martin Fowler 提出了 (依赖注入:Dependency Injection)的概念用以代替 IoC,即让调用类对某一接口实现类的依赖关系由第三方(容器或协作类)注入,以移除调用类对某一接口实现类的依赖。依赖注入这个名词显然比控制反转直接明了、易于理解。02依赖注入的类型依赖注入的类型及配置方式依赖注

7、入的类型及配置方式依赖注入的类型及配置方式依赖注入的类型及配置方式依赖注入的类型及配置方式依赖注入的类型及配置方式属性注入23 1构造函数注入接口注入 构造函数注入 通过调用类的构造函数,将接口实现类通过构造函数变量传入。依赖注入的类型及配置方式依赖注入的类型及配置方式依赖注入的类型及配置方式依赖注入的类型及配置方式 属性注入 通过setter方法完成调用类所需依赖的注入,更加灵活方便。属性注入23 1构造函数注入接口注入依赖注入的类型及配置方式依赖注入的类型及配置方式 接口注入 将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的注入方法。为了采取接口注入,必须先声明一

8、个ActorArrangable接口依赖注入的类型及配置方式属性注入23 1构造函数注入接口注入依赖注入的类型及配置方式依赖注入的类型及配置方式依赖注入的类型及配置方式03IoC总结IOC为我们带来了什么好处 不用自己组装,拿来就用 降低了使用资源双方的依赖程度,也就是我们说的耦合度 便于单元测试,方便切换mock组件 便于进行AOP操作,对于使用者是透明的 统一配置,便于修改IoC总结IOC容器的一些产品 Sun ONE技术体系下的IOC容器有:轻量级的有Spring、Guice、Pico Container、Avalon、HiveMind;重量级的有EJB;不轻不重的有JBoss,Jdon等等。Spring框架作为Java开发中S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论