版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
9-开发培训——IoC培训作者:版本:时间:说明:赵睿1.02009--03--23初稿IoC的概概念在很早的220033-20005年年的时候候,Jaava社社区掀起起了一阵阵轻量级级框架的的狂潮,这这些轻量量级框架架能够帮帮助开发发者将来来自各种种不同项项目的组组件内聚聚到一个个应用程程序中。这些个轻量级框架的背后都有一个重要的模式在支撑它们的工作方式,就是InversionofControl,即是IoC。这些个框架发展到今天已经相当的成熟,并且成为了很多大型成熟项目的支柱。其中最为著名的要数Spring了,它的作者正是当年写出了writej2eewithoutejb的人,他挑战j2ee的ejb就像爱因斯坦挑战天体力学的牛顿一样。IoC除了了控制反反转这个个称呼以以外,还还有一个个大家很很熟悉的的词语叫叫依赖注注入DeepenndenncyInjjecttionn,当然然这两个个名字描描述的含含义在这这里是一一样的,即即是将组组件的配配置和使使用分离离开,以以及各个个组件之之间的松松耦合。下面来看一一个例子子,说明明什么是是IoCC。[codee]classsPoostSServvicee…privaatePosstDaaopoostDDao=nnewPosstDaao());publiicvvoiddadddPoost((Posstppostt){{pposttDaoo.crreattePoost((posst);;}…publiicsstatticvoiidmmainn…{PPosttSerrviccesservvicee=newwPoostSServvicee();;sservvicee.adddPoost((newwPoost(());;}[codee]从这个例子子中我们们了解到到我们生生成了一一个新的的帖子访访问类PPosttDaoo,并使使用这个个PosstDaao来对对帖子进进行存储储。这个时时候PoostSServvicee掌控了了所有的的事情,它它知道怎怎么去得得到PoostDDao,现现在假设设这个PPosttDaoo对帖子子的存储储是存储储到一个个文件中中,这个个时候我我们如果果改变一一个需求求,把它它存储到到数据库库服务器器中,那那么我们们不得不不去修改改PosstSeerviice代代码为[codee]privaatePosstDBBDaoopoostDDao=nnewPosstDBBDaoo();;[codee]或者PosstDaao代码码,但如如果哪天天我们又又决定改改回成文文件的存存储方式式的时候候,麻烦烦、效率率、成本本又增加加了。这这个时候候我们需需要一种种良好的的解决方方案。IIoC的的方式正正好,这个时候我我们将控控制反转转到外部部,而非非PosstSeerviice自自己。[codee]classsPoostSServvicee…privaatePosstDaaopposttDaoo;publiicvvoiddadddPoost((Posstppostt){{pposttDaoo.crreattePoost((posst);;}publiicvvoiddseetPoostDDao((PosstDaaopposttDaoo){{tthiss.poostDDao=pposttDaoo;}…publiicsstatticvoiidmmainn…{PPosttSerrviccesservvicee=newwPoostSServvicee();;sservvicee.seetPoostDDao((newwPoostFFileeDaoo()));///serrvicce.ssetPPosttDaoo(neewPPosttDBDDao(());;sservvicee.adddPoost((newwPoost(());;}[codee]从上面的代代码我们们可以看看到,如如果我们们对数据据访问存存储方式式进行了了改变,要要做的仅仅仅是写写一个新新的改变变方式的的PosstXXXXDaao并且且继承PPosttDaoo(当它它是类时时)或者者实现PPosttDaoo(当它它是接口口时),当当然我推推荐的是是面向接接口的编编程,然然后将这这个新的的类在需需要时注注入进去去,这样样整个组组件变得得异常透透明和松松散。IoC的几几种形式式。依赖注入有有几种形形式。Type11:构造方法注注入[codee]classsTeest……publiicTTestt(InnjecctCllassscllazzz){{…}[codee]Type22:设值注入[codee]classsTeest……publiicvvoiddseetInnjecctCllasss(InnjecctCllassscllazzz){{…}[codee]Type33:接口注入interrfacceIInjeectIInteerfaace{vvoiddinnjecctCllasss(InnjecctCllassscllasss);}classsImmplimpplemmenttsIInjeectIInteerfaace{…ppubllicvoiidiinjeectCClasss(IInjeectCClassscclasss){…}}接口注入比比较不常常用。IoC容器器介绍IoCC容器经经过多年年的洗礼礼,现在在比较著著名的有有这么几几个,SSpriingfraamewworkk.PicoCConttainner,GGuicce。SSpriing我我们下面面会详细细讲它的的用法。GGuicce是GGooggle的的IoCC容器,是是一种采采用元数数据的方方式进行行装配的的过程。PPicooConntaiinerr则相对对用得较较少。Sprinng的用用法在在理解了了IoCC的概念念之后,理理解Spprinng的使使用就相相对简单单了。主要结合SSpriing讲讲讲一个个简单的的虚拟的的应用。假设我们的的需求是是登录用户户可以在在网站上上发贴。除开JSPP输入页页面不谈谈,我们们对Weeb层以以下的做做一个简简单的设设计。服务层数据访访问层实实体类数据据库PostSServviceePosstDaaoPoostPosst表测试先行,我我们先写写一个测测试。[codee]@TesttpubliicvvoiddteestAAddPPosttSucccesss()){ AppllicaatioonCoonteextconntexxt==newCllasssPatthXmmlApppliicattionnConntexxt(""sprringg-beeanss.xmml"));PostSServviceepoostSServvicee=(PoostSServvicee)cconttextt.geetBeean(("PoostSServvicee");;Postposst==neewPPostt();; postt.seetNaame(("poostNNamee");; postt.seetCoonteent(("coonteent""); posttSerrvicce.aaddPPostt(poost)); asseertEEquaals((posstSeerviice..gettPosst(11));;}[codee]注意这里的的ApppliccatiionCConttextt,他是是获取装装配组件件的上下下文。通过conntexxt.ggetBBeann(…)来获得得组件服服务。然后我们看看看PoostSServvicee类:[codee]publiiciinteerfaacePosstSeerivvce{vvoiddadddPoost((Posstppostt);}[codee]可以看出,这这个PoostSServvicee只是一一个接口口。具体体的实现现是:[codee]publiiccclasssPPosttSerrvicceImmplimpplemmenttsPPosttSerrivcce{{ privvateePoostDDaoposstDaao; publlicvoiidaaddPPostt(Poostposst){postDDao..creeateePosst(ppostt); } publlicvoiidssetPPosttDaoo(PoostDDaoposstDaao){this..posstDaao==poostDDao;; }}[codee]当然PosstDaao也是是一个接接口,我我们要习习惯针对对接口来来编程。PostDDao的的代码就就不列出出了。下面我们重重点来看看看Spprinng-bbeanns.xxml这这个配置置文件[codee]<beannidd="pposttDaoo"cclasss=""comm.yiiji..daoo.immpl..PosstDaaoImmpl""><//beaan> <beaaniid=""posstSeerviice""claass=="coom.yyijii.seerviice..imppl.PPosttSerrvicceImmpl""> <<prooperrtynamme=""posstDaao"reff="pposttDaoo"/>></beaan>[codee]<beann>标签签定义了了一个可可以使用用的Jaava类类。它的的id在在文档中中必须是是唯一的的不重复复的,cclasss属性性是这个个<beean>>所指向向的具体体的类。通通常是一一个实现现了具体体业务方方法的类类。<proppertty>标标签是这这个<bbeann>所指指向的具具体的类类的一个个属性,这这里就是是体现IIoC的的地方了了。上述述的naame==”posstDaao”是对应应的在PPosttSerrvicce类中中的meembeerffielld,pposttDaoo,如果果这里的的名字与与<beean>>的cllasss的名字字不同,那那么在执执行程序序的时候候会抛出出异常。这这里的pposttDaoo由于已已经有一一个<bbeann>是我我们
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47189-2026油井水泥浆体弹性模量试验方法
- 宫腔镜下子宫内膜息肉摘除术后护理查房
- 肱骨内固定装置去除术后护理查房
- 根治性颈淋巴结清扫术后护理查房
- 风险评估与应对措施规划手册
- 餐饮服务业食品安全操作指导书
- 供应链环节责任管理品质保障承诺书范文3篇
- 行业文档归档与检索管理工具
- 辽宁省铁岭市达标名校2026届初三下学期月考二英语试题含解析
- 浙江省仙居县2025-2026学年初三零模语文试题含解析
- 《医学影像检查技术学》课件-足X线摄影
- 黄金冶炼项目可行性研究报告
- 第15课《十月革命与苏联社会主义建设》中职高一下学期高教版(2023)世界历史全一册
- GB/T 11981-2024建筑用轻钢龙骨
- 2024年高等教育文学类自考-06216中外建筑史考试近5年真题集锦(频考类试题)带答案
- 《AutoCAD 2023基础与应用》 课件全套 劳动 项目1-8 AutoCAD 2023 入门、绘制简单平面图形-综合实训
- 缠论-简单就是美
- 教师读书分享《做温暖的教育者》
- QCT1177-2022汽车空调用冷凝器
- 2.1科学探究感应电流的方向课件-高二物理(2019选择性)
- 2024陆上风电场安全生产标准化实施规范
评论
0/150
提交评论