欢迎来到天天文库
浏览记录
ID:48058624
大小:479.00 KB
页数:11页
时间:2020-01-13
《Spring IOC.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第二章SpringIOC什么是IoC/DIIoC即控制反转,有时候也叫做DI(依赖注入)所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。2IOC/DI笔记本电脑与外围存储设备通过预先指定的一个接口(USB)相连,对于笔记本而言,只是将用户指定的数据发送到USB接口,而这些数据何去何从,则由当前接入的USB设备决定。在USB设备加载之前,笔记本不可能预料用户将在USB接口上接入何种设备,只有USB设备接入之后,这种设备之间的依赖关系才开始形成。对应上面关于依赖注入机制的描述,在运行时(系统开机,USB设备加载)由容器(运行在
2、笔记本中的Windows操作系统)将依赖关系(笔记本依赖USB设备进行数据存取)注入到组件中(Windows文件访问组件)。3注意:依赖注入的目标并非为软件系统带来更多的功能,而是为了提升组件重用的概率,并为系统搭建一个灵活、可扩展的平台。4依赖注入的几种实现类型Type1接口注入Type2设值注入Type3构造函数注入5Type1接口注入publicclassClassA{privateInterfaceBclzB;publicObjectdoSomething(InterfaceBb){clzB=b;returnclzB.doIt();}……}在运行期,InterfaceB实例将
3、由容器提供。6Type1型IOC发展较早(有意或无意),在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中。下面的代码大家应该非常熟悉:publicclassMyServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{……}}7Type2设值注入在各种类型的依赖注入模式中,设值注入模式在实际开发中得到了最广泛的应用(其中很大一部分得力于Sp
4、ring框架的影响)。模拟不同移动设备的存储8Type3构造函数注入publicclassDIByConstructor{privateDataSourcedataSource;privateStringmessage;publicDIByConstructor(DataSourceds,Stringmsg){this.dataSource=ds;this.message=msg;}……}9比较Type2设值注入的优势1.对于习惯了传统JavaBean开发的程序员而言,通过setter方法设定依赖关系显得更加直观,更加自然。2.如果依赖关系(或继承关系)较为复杂,那么Type3模式的
5、构造函数也会相当庞大(我们需要在构造函数中设定所有依赖关系),此时Type2模式往往更为简洁。3.对于某些第三方类库而言,可能要求我们的组件必须提供一个默认的构造函数(如Struts中的Action),此时Type3类型的依赖注入机制就体现出其局限性,难以完成我们期望的功能。10Type3构造子注入的优势:1.“在构造期即创建一个完整、合法的对象”,对于这条Java设计原则,Type3无疑是最好的响应者。2.避免了繁琐的setter方法的编写,所有依赖关系均在构造函数中设定,依赖关系集中呈现,更加易读。3.由于没有setter方法,依赖关系在构造时由容器一次性设定,因此组件在被创建之
6、后即处于相对“不变”的稳定状态,无需担心上层代码在调用过程中执行setter方法对组件依赖关系产生破坏,特别是对于Singleton模式的组件而言,这可能对整个系统产生重大的影响。4.同样,由于关联关系仅在构造函数中表达,只有组件创建者需要关心组件内部的依赖关系。对调用者而言,组件中的依赖关系处于黑盒之中。对上层屏蔽不必要的信息,也为系统的层次清晰性提供了保证。5.通过构造子注入,意味着我们可以在构造函数中决定依赖关系的注入顺序,对于一个大量依赖外部服务的组件而言,依赖关系的获得顺序可能非常重要,比如某个依赖关系注入的先决条件是组件的DataSource及相关资源已经被设定。11
此文档下载收益归作者所有