(计算机应用技术专业论文)开放式油水井施工设计系统应用研究.pdf_第1页
(计算机应用技术专业论文)开放式油水井施工设计系统应用研究.pdf_第2页
(计算机应用技术专业论文)开放式油水井施工设计系统应用研究.pdf_第3页
(计算机应用技术专业论文)开放式油水井施工设计系统应用研究.pdf_第4页
(计算机应用技术专业论文)开放式油水井施工设计系统应用研究.pdf_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

人连理上人学硕士学位论文 摘要 能源竞争已成为当代国际竞争的重要内容,随着我国国民经济发展和对能源行业的 更加重视,石油工业被推到了极其重要的战略位置。信息技术的应用对于提高石油行业 勘探开发、数据应用、经营管理水平具有革命性意义。高升采油厂是辽河油田的重要生 产基地,其信息化建设居于全油田前列。高升采油厂油水井施工作业频繁,所以建立一 套现代化施工设计系统对于提高油气产量、缩减生产费用具有重要意义,对于推动石油 信息化建设步伐,加快石油国际化进程也有一定贡献。 本文研究的开放式油水井施工设计系统来源于辽河油田高升采油厂的工程项目开发 实际。系统前端构建了一个用户程序运行框架,实现了基于模板技术的开放式在线施工 设计,模板和图素等易变用户代码完全向用户开放,由用户负责编写维护,而整体流程 控制、远程数据访问、管柱示意图绘制等基础框架由系统实现,这样既保证了对最终用 户的开放性,又保证了整个系统的高效稳定。系统后台设计遵循“高内聚、低耦合”、 “开闭”等原则,采用了依赖注入、面向方丽编程等新技术,解决了协作对象之间以及主 要业务逻辑与非主要业务逻辑之间的紧密耦合问题,实现了对系统扩展、维护、升级的 完全开放。此外,系统还针对直接应用o d b c 、a d o n e t 等低层数据访问a p i 进行应用 编程所存在的与底层数据库系统紧密耦合、代码繁琐、可读性差、不易移植等问题,设 计实现了一个基于模板技术的数据访问框架,实现了数据平台开放性。 开放式油水井施工设计系统,对用户开放,使用户能够参与系统的修改和维护,缩 减了软件系统维护费用。这种结构和设计思想可供其它领域的应用开发参考。 该系统已于2 0 0 4 年8 月在高升采油厂正式上线运行,应用效果良好,受到了采油、 注汽、地质、工艺、生产管理等部门和作业乙方的一致好评。 关键词:开放式;油水井施工设计;在线编辑;轻量级容器;数据访问框架 开放式油水井施工设计系统应用研究 o p e n i n g o i la n dw a t e rw e l lc o n s t r u c t i o n d e s i g ns y s t e m r e s e a r c h a b s t r a c t n o w a d a y s ,t h ec o m p e t i t i o no fe i 撼f 7r e s o u r c e sh a sb e c o m et h eh o ts p o to f i n t e r n a t i o n a l r i v a l s h i p a l o n g w i t ht h e r a p i dd e v e l o p m e n t o fn a t i o n a le c o n o m ya n dt h e p r o s p e r i t yo fe n e r g y i n d u s t r y , 8s t r m g i cp o s i t i o nh a sb e e ne n d o w e dt ot h eo i li n d u s t r y 硼豫a p p l i c a t i o no f i n f o r m a t i o nt e c h n o l o g yh a sa t t a c h e dr e v o l u t i o n a r ys i g n i f i c a n c e 幻t h ei m p r o v e m e n to f 妇。矗 e x p l o 糟垃o n , d a t aa p p l i c a t i o na n dn m n a g e m e n ta sw e l l g a o s h e n go i le x t r a c t i o nf a c t o r y , a n i m p o r t a n tm a n u f a c t u r eb a s eo fl i a o h eo i l - f i e l d , i sp l a y i n ga l e a d i n gr o l ei nt h ei n f o r m a t i o n a l c o - - o r i o n a m o n g a l lo i lf i e l d s a s8r e s u l to f i t s f r e q u e n to i l - w e uc o n s t r u c t i o n , i ti su r g e n t1 0 b u i l d a m o d e m c o n s t r u c t i o n d e s i g n s y s t e m 羽嘧s y s t e m i s o f g r e a t s i g n i f i c c e t o t h e i n e r e 糌i n t h eo i lo u t p u ta n dt h ed c c r c 黜i nt h eo p e r a t i n g c o s t s , w h i l ei ti sm 她c o n t r i b u t i o n st ot h e p r o m o t i o n o f t h ei n f o r m a t i o n a l i z a t i o na n dt h ea c c e l e r a t i o n o f i n t e r n a t i o n a l i z a t i o no f 硼i n d u m y 曩持o p c l l i n go i la n d w a t e rw e l lc o n s t r u c t i o n d e s i g ns y s t e mi n v e s t i g a t e di nf l t i sp a p e rr o o t s i nar e a l p r o j e c td e v e l o p e df o rg a o s h e n go i l 黾曲糍缮f a s t o r yi nl i a o h eo i l - f i e l d a n e x e c u t i n gf r a m e w o r kf o ru s e ra p p l i c a t i o ni si m p l e m e n t e da tt h ec l i e n te n d , w i t ht h er e a l i z a t i o n o f t e m p h m - b a s e do p e l 蛾o n l i n ed e s i g n e n du s c l 苫a mi nc h a r g eo f w x i t h gm 】dm a i n t a i n i j 曜t h e m e n n s t a n tc o d e o p e n t ot h e m , s u c ha s t e m p l a t e sa n d c h a r t e l e m e n t s 。c o n m a i l y , t h ei m m u t a b l e i n f r a s t r u c t u r es u c ha s o n l z o lo f t h ee n t i r e p r o c e s s ,r e m o t e d a t aa o c 粼,a n d h i s t o g r a md r a w i n l 丑舀 l si m p l e m e n t e db yt h es y s t e 4 1 li t s e l f m l i se r c k f i t e c t u me n s u r e st h eo p e n m g t oe n du 8 稍h i g h p e r f o n n m c c sa n ds t e a d i n e s so f t h ew h o l es y s t e m a c c o r d i n gt ot h ep r i n c i p l e h i 蚺c o h e s i o n , l o o s e l yc o u p l i n g , s 。m en e wt e c h n o l o g i e ss u c ha sd e p e n d e n c yi n j e c t i o na n da s p e c to r i e n t e d p m g r a m m m g a r c a d o p t e d i nt h es e r v e r - e n dd e s i g n 磁s d e s i g ns u c c e e d si ns u l v i l l gt h et i g h t l y - c o u p l i n gp r o b l e mb e t w e e nd o m i n a t i v ea n de x t r a - e s s e n t i a lb u s i n e s sl o g i c , a n di n c o m p l e t e o p e n m go fs y s t e me x p a n s i o n , m a i n t e n a n c ea n du p g r a d e 。f u r t h e r m o r e , 8t e m p l a t e - b a s e dd a t a 粒淄f r a m e w o r ki si m p l e m e n t e dt os o l v et h e p r o b l e m so f t i g h t l yc o u p l i n gw i t hb o t t o md b m s 。 c o d er e d u n d a n c y , p o o rr e a d a b t u t y , a n dd i f f i c u l tt r a n s p l a n t a t i o n , i na p p l i c a t i o np r o g r a m m i n g u s i n gl o wl e v e la p i ,s u c ha s o d b c ,a d o n e c o n s e q u e n t l y , t h eo p e n i n go f d a t ap l a t f o r mi s r e a l i z e d w i t ha l la d v a n c e da r c h i t e c t u r e , t h ee n t i r e o p e n i n go i la n dw a t e rw e l lc o n s m a c t i o n d e s i g ns y s t e mi so p e nt oe n dn s e r s ,w h oc a nt a k ea na c t i v er o l ei ns y s t e mm o d i f i c a t i o na n d m a i n t e n a n c e - t h u st h ec o s to fs o f t w a r e s y s t e mm a i n t e n a n c ei sp r o m i n e n t l yr e d u c e d m l i st y p e o f f r a m e w o r k a n d d e s i g n m e t h o d i s o f g r e a t v a l u e t o a p p l i c a t i o n d e v e l o p m e n t i n o t h e r f i e l d s 。 - 。 大连璁芝大学域士学斑逢文 s i n c ea u g u s t , 2 0 0 4w h e nt h es y s t e mw a sc o m m e n c e di nt h ef o r m a le a v i r o n m c n t , i th a s b e e nr e c e i v i n gh i g h p r a i s e s f x o ma l ls i d e so ft h ec r a o s h e no i le x t r a c t i o n f a c t o r ya n d c o - - t o t s k e y w o r d s o p e n i n g ;c o n s t r u e f l o n d e s i g n ;o n l i n e e d i t ;l i g h tw e i g h tc o n t a i n e r ;d a t a a c c e s sf r a m e w o r k i i i 独创性说明 作者郑霪声明:本硕士学位论文是我个人在导师指姆下进行的研究 工作及取得研究成果。尽我所知,除了文中特别加以标注和致谢的地方 辨,论文中不包含其能人已经发袭或撰写的研究成果,也不包含淹获褥 大连理工大学或其他单位的学位戚证书所使用过的材料。与我一阕工作 鹣燕恚对零雾 究所徽的贡献均鑫在论文中傲了明确的说骥弗表承了落 意。 作者签名; 鬻窥模式下,返回所有摸板豹功能被抽象为一个接口t e m p l a t e f i n d e r ,函数 t e m p l a t e s c a n d e s i g n b y o 委托i 亥接口的一个默认实现d 。触l 髅淑l 嚣获取系统包会的赝富模 板,然后遍历返回的清单,比较模板的部门属性和当前用户的所属部门是否一致,最后 返回巍饕用户可以逑行设谤的模援列表。本文粪歪要考察豹闼遂是如露将删a 磁盘暾 对象岛驯械d e r 接口的特定实现类联系越来。在常规实现模式中,将创建特定实 现类酌代鹞疆编羁在t e m p l a t e l i s t e r 类 , 这种方式虽然实糯简单,代码筋读,但这样 t e m p l a t e l i s t e r 就不仅依赖t e m p l a t e f i n d e r 接i = 1 ,面且依赖予特定实现粪d e f a u l t f i n d e r 。 迸一疹分析,常规模式下t 相互协作类t e m p l a t e l i s t e r 和d e f a u l t f i n d e r 紧密耦合在一起, 有逮针对接霸编 雾碍b 松教凝会”的设诗原则。 3 1 1 2i o c 模式 l o c 筷式在t e m p l a t e l i s t e r 静构造遴数中褥t e m p l a t e f i n d e r 接i = i 酌一个其体实现类的 对象旬柄赋饿给f i n d e r 变量,或者给t e m p l a t e l i s t e r 增力 1 - - 个设置函数,通过该设傻函数 将t e m p l a t e f i n d e r 的一个具体实现对象赋德给融d e r 变量,代码如下: c l a s s t e m p l a t e l i s t e r p r i v a t et e m p l a t e f i n d e rf i n d e r = n u l l ; t e m p l a t e l i s t e r f r e m p l a t e f i n d e ra f i n d e r ) f i n d e r = a f i n d e r ;) p u b l i cs e t f i n d e r f r e m p l a t e f i n d e r a f i n d e r ) f i n d e r ;a f i n d e r ;” - l 聱一 茎堕墨垫查垫照三塑笪壅堑查翅堑壅 然后蠹蚕g 肇掇掇於部配鬣文转剑建殛嘲腿e f i 西e f 搂融黥一令特定嶷瑷类靛对象,磐 将该对象的旬辆传递给需要宦盼酗印l a 钯l i s o 濮。这种方式虽然没有髓者直观,毽怒它 简化了代码,穆除了t e m p l a t e l i s l 髓类和d 觥i l 记时类之间的紧密耦含关系,使整个系 统的可扩展性、可配置性大大提高。 登系统嚣慕发送蔹交或卷移疆努薪魏繇壤每l l 幸,莓叛盔接港翔毫鸯接口蓊耨鞠实现 类和修改配置文件,而不需修改原有代码。这样的系统设计很好的满足了“低耦合”的原 则,将本来硬编硒在系统内郝的对象依赖关系外部化到可以随时修潋的外部配置文件 中,捷系统完全宠嚣臻维护彝二次舞发舞效。 3 1 2 依赖注入实现解耦 控制反转,怒框架设计中的一个常用模式,由基础樵架代码去调用商层用户对缴代 鹊,薅用户对象熙焉实现特慰接口。即将健绕类库设诗巾瓣思户代码涟鼹类摩函数熬方 式旋转过来。本文中婉特稽瓣定位捶辞鹃基体实现豹反转。应用i o e 的蕊想,由低鬃框 架( 容器) 在运行时根据外部配鬣将具体实现熊的对象插入划应用中,因此这种模式也称 为依赖注入( d e p e n d e n c yl n j e e 垃o n ) 。 蒙羧注入熬辫恣就是震一令摹猿瓣窖嚣来获褒螽定接1 :3 熬特定实魏,并蒋其实铡虢 值络需要它的对蒙属性,如此。可以得到上丽例子韵新的依赖关系图,如图3 1 所示。 窜= 窜 宦一目 黧3 1 依赖注入模式的依赖荚系嚣 f i g 3 ld e p e u d e u c y - i n j e c t i o nd e p e n d e n c yg r a p h 依赖注入有飘种主要的形斌:接口依赖淀入、设值依赖注入、构造函数依赖注入。 目髓,般的l o 燃都支持这三秘依赖注入的静或凡秘。 3 + 1 2 。l 接西锿羧注入 一 所谓接口依赖注入就是指通过实现特定的接口来获鞭篡依赖接口的一个具体实现。 下麟,我们仍以模板列表作为例予,加以说明。 - 2 0 , 大连理工大学硕士学位论文 螯先,豢要定义一令接口,缀 孛戆注入萼磬遴遘这个接蠢遴行。 p u b l i ci n t c r 溉埘e e t t e m p l a t e f i n d e r v o i d 秘c c 疆e 呼a 自礤蕊琵删蹴f 嘲群斑函嘭; 这个接1 :1 应该与t e m p l a t e , f i n d e r 接口一并提供。任何想要使用t e m p l a t e , f i n d e r 实例 的类都必须实现这个接口。 c l a s st e m p l a t e l i s t e r :i n j e c t t e m p l a t e f i n d e r 。 p u b l i c v o i d i n j e c t t e m p l a t e f i n d e r ( t e m p l a t e f m d e rf i n d e r ) _ f i n d e r = f i n d e r ; 也可以使用类似方法将r e i n p i a 麟弧蛔接口嶷现类依赖的数据库涟接字符串、文件名 或者怒粥b 辩蹦c c 羹基矗等镄惠注入进去。现在,还嚣簧霜一魏配置健蹲将掰有瓣缀释实 现装配起来。简单越见,可以直按在代粥中完成配置,并将配置好的t e m p l a t e l i s t e r 受j 象 保存在名为l i s t e r 韵变量中。 3 。1 2 2 设俊黼数依赖注入 所谓设值函数依赖注入就是i 随过提供一个对类内部私有变量进行赋值的设值函数来 注入袄赣浆羧日实现。下甏举铡说骧: 为t i :t e m p l a t e l i s t e r 类接受注入,获取其依赖的t e m l 妇髓弧蛔接口的一个实现, 需要海它定义一个 受毽_ 方法; p u b l i c v o i d s e t f i n d e r “e m p l a t e f m d e rf i n d e r ) t h i s f i n d e r = f i n d e , 类似地,在t e m p l a l e f m d e r 的实现类d e f a u l t t e m p l a t e f i n d e r ,也定义了一个没蠖方 法: p u b l i cv o i ds e t d b c o r m s t d n g ( s t r i n gc o n n s t r i n g ) _ c o n n s t r i n g = c o n n s l r i n g ; 鸯上瑟铡予不麓懿是,装配健璐霹叛乡 整纯爨一个琵置文转孛,赉容器壤撂辩置文 件的内容自动完成装配。 o b j e c ti d = q e m p l a t e l i s t e r t y p e = ”瞰酒a 姆l i s 溅s g s j + 啪巧e c 3 t 2 3 构造函数依赖注入 获 霉稳遣爨数莰毂注入麓是撵逶过鬟爨一令鞫逢溺数一次毪蒋娄黎要熬蔹簇鹣绥霜 实现注入。1 戡l a 钯i j g c e r 类必须声明一个构造函数,并在其中包含所有需要注入的茹素 作为参数: p u b l i c t e m p l a t e l i s t e r ( t e m p l a t e f i n d e r f i n d e r ) 参n d 娌一溉 d e f a u l t t e m p l a t e f i n d e r 依赖的数据库连接字符串也可以由容器通过构造函数注入: p u b h ed e f a u l t t e m p l a t o f i n d e r ( s n i n gd b c o n n s t r i n g ) ( _ d b c o n n s l a i n g = d b c o n n s t r i n g ; 与设值遁数依赖一样,貔们可| 三l 在代礴中或者外部酝置文件中指嫩接口和实现的对 _ | 簸熬系及他们之间的依赖关系。 3 1 3i o e 轻量缴察器 。 3 1 3 。1 容器 容器就是应用代码在其中运行的一个樵架【1 5 】。任何容器都应该提供如下服努:生 命周期管理、对象定位、配援、依赖关系管理等;此外,一些成熟的容器还可能提供如 下遥骚务:声餮式爱亟缀黻务、集释、霹撇理配嚣王其等。 3 1 3 2 轻量级容器 如果一个容器能够满足如下条件,就可以叫做轻量级容器 1 0 q ; ( 1 ) 寝动遥发莰,没蠢特定装发毒步骤; ( 2 ) 容器本痨不依赖特定的运行环境; ( 3 ) 容器给蟋行其中的对象带来的性能负担要低; ( 4 ) 容器骞够管理应用对熬,僵不存在瓣应用代鹨鹣特定依簸。 3 1 3 。3 轻萋缀容器必要经分耩 轻量级容器能够提供完熬的可插入性支持,在运杼期可以插入同一接口的不l :j 实 现,丽不需要修改已有代码署珏燕新编译郝爨。轻量级容器能够提供统一的服务查找,对 象淝爱方法,避免了大萋静炎格式各异豹酝鬣文彳孛秘攀键穰式豹存在。挖井,容器靛够 提供一些企业级服务,如事务傺理、安全管理等,能够减轻应用开发人员的负担。 一2 2 大连理工大学硕士学位论文 3 ,1 3 4 轻量级容器威用场合 盛用轻迸级容嚣,可以缩短开发周期,保诞良好的编码规范,使应用系统具有良好 戆霹测试犍,笼其憝哥扩袋缝移羚数毪,瞧够僚涯在苓彩嚷瓒有代璐熬条传下,增燕瑟 的应用对象,便于系统的升级和推广使用。 。 蘸然轻爨缀容器怼应潮我鹃没有任何侵入健,对波爵代褥没有特殊要求,僵其配置 和应用接口也有一怒的学凇周期,在项瞬中使用轻量缀容器具有一定的风险性。此舢, 轻量级容器般不支持集群,对释错等的支持也一般,不太适用子太规模趣大规模的企 业级戍用【l 刀。 开放式油水井施工设计系统用户局 睦于一个采油企业的设计及错理用户,人数不是 缀多,受载誉大,举嚣集释等商缀磅麓。基予虢上分析,轻羹缀容嚣满是系统貔器求。 3 2i o c 容器在系统中的实现 本节将重点介绍开放式油水并施工设计系统中i o c 轻量级释器的设计与实现,该容器 虽然撵为洼承势藏警设诗系统躲一部分搿发,健其胃黻燕子其它金驻波用壤强嚣簸,势 对企业应用架构具有一定的借鉴意义。谈容器盼设计弱标是满足油水井施正设计羝统开 放往鹬要求,具有垒命霜麓管理、对苏照锰、对象配鬣、依鞭关系镣理等铎器的篷本功 能,势在此基础上实现了一个可扩展的甄向方霹编程樵架。容器的嶷现主瑟涉及到闷雕 反射、远程对象调阁等内嵌机制。 3 。2 。1 餐器豹囊要设访愚恕 如图3 2 所示,容器的核心是一个o b j c c t f a c t o r y i 厂,应用程序或w e b 服务器启动 时,对其进静裙始纯【1 8 】。容器;留始纯辩,o qc c i 韵c l o 巧委托n l o 蝤鼠鼢d e r 从外部配 置文件中读取对象定义o 埒e c i 测呔m ,缓存至4 工厂中,然艨实织| 化每一个单铡模式憋 对象,将对承的引厢保存到单列对象缓存池中。x m l o b j e e t r e a d e r 针对每一个对魏定义 沤带焘,调建0 嘲。c o 舔枷鞠翔崧;e 溅据蹦捌 戮围类孛定义熬对象定义嚣数据解据托 管对象定义。生成o b j e e t d e f i n i t i o n 对象。o b j e e t l ) e f m i t i o n 包括对浆属性定义 氧蠹躏l 费捌,e 脚v 越u e s 帮褥造函数参数定义e o n s 镛l j 幽峨瑁瑚蹦f v a h 躺,m u t a b l e p r o p e r t y v a l u e s 是一个属性的集合,每一属性用p r o p c r l y v a l u e 表示。 外都应用代码向容器请求对蒙引用时,容器r o b j e e t f a e t o r y 首先芸e m m j 模式对象缓存 池中套找,如果找至i 直接返回,黉舞读敬对象突义,遴过反射掇铡创建一令瑟熬实爨, 返回给应用代码。对苏实例的构造是通过i n s t a n t i a t i o n s t r a t e g y 策略对象调用o b j e c t u t i l s 实 凝,对象藩镌静设嚣是逶过对象毽装嚣o b j e e t w a p p e r 辖韵类,逶过蕊日肉建静蔽射税 一2 3 开放式油水井施工设计系统应用研究 制根据对象的定义中的属性列衷d v l u t a b l e p r o p e r t y v a l u e s 设置新创建对象的属性,必器 的时候进行数据类型转化,也就是设置黼数依赖注入来完成的。此外,可以根据对象实 现的容器特定接口,回调应用代码,实现额外的对象初始化和资源清理释放。在n e t 平 台对象定义作为w e b 应用的w e b c o n f i g 或w i n d o w s 应用的a p p c o n f i g 配置文件中的一个配 置节存放,该配置节由系统调用i c o n f i g r a t i o n s e c f i o n h a n d l e r 接i :l 的实现类c o n 触l m d i e r 负责解析。 i c o n f l g u r a t l o n s e 0 u o n h a n d l e r l o b j e c t f a c t o r y 崮一昏i 目自 f i g 3 2c o n t a i n e r s t a t i cc l a s s g r a p h 3 2 2 容器主要接口分析 1 0 c 轻量级容器倡导针对接口编程,本文提出的轻爨级容嚣是囊螅设计实瑗选砉器是基 于接口。下面重点分析该容器中几个踅要的接口。 - 2 4 大连理工大学硕士学位论文 3 2 2 1 i o b j e c t f a c t o r y i o b j e c t f a e t o r y 是整个察器的核心接口,也是其它功越麴基矬,它的实现类缝够接受 i o b j e c t d e f i n i t i o n f 誉为对象的定义,能够创建对象熬实铡,菸自动完成对象阀铱羧关系楚 理和对象生命周期管理。 ( 1 ) i o b j e c t f a e t o r y 接口提供了鳆个g e t o b j e e t 0 力;法,寒遥过黯象名称查滋对象雩 翔, 一个可选的方法参数遐j 秀要求的对象类型,如果类越不匹配姆镑致搀零抛出。 ( 2 ) c o n t a i n s o b j e c t o 力 法用于测试绘定的对苏在哟翠中是讴存在。 0 ) i s s i n g l e t o n o 方法用于测试给定的对象在f a 渤i y 中是否是单例模式的对壤,即威 有客户共事该类的同一实例,一般容器会在启动时预先创建好所有单例对象,缓存在单 例对琢池中。 ( 4 ) 两个g e t o 场锄剁o n o 方法用于返回指定名称的对象定义,一个可选的参数 怒所要求的对绿类型,如果类挺不匹配将导致辫:鬻抛出。 ( 5 ) g e t o b j e e t d e f i n i t i o n n a m e s 0 方i 表返阐容器中定义的所有对象的名称,如果提供了 可选参数砖艄返回指定类型的所有对象的名称。 ( 6 ) r e g i s t e r c u s t o m c o n v e r t e r 0 方法用于向容器注册特定类型的类挺转化器,类型转化 器( t y p e c o n v e r t e r ) 属于n e t 的内建支持。 r e g i b j e e t d e f m i t i o n 0 方法用于向容器注册对象定义,该方法由 i o b j e e t d e f i n i t i o n r e a 磁i z l 调用。 i o b j e e t f a e t o r y 接翻的实现类有两个至关羹要的环节:一个是容器启动时。调用 i o b j e c t d e f i n i t i o n r e a d e r 获取外部配置文件中定义的所有对象的定义,并预先实例化所有 配置为单例模式的对象;个是当容器的客户调用饶t o 巧e 。t ( ) 方法时容器首先查找单 饼对象缓存沲,我至n 羹n 直接返闻,否贝目在对象定义池中获取对象定义,根据定义实例化 詹返瑟。作者将在下一节容器实现中详细讲述糟两部分。 3 2 2 2i o b j e c t d e f i u i t i o n r e a d e r i o b j e c t d e f m i t i o n r e a d e r 接1 2 1 负责为i o 巧e c 眦咄彬提供对象定义,在内部 i o b j e c t d e f i n i t i o n r e a d c r 读鞭矫部配置文件,获取每一个对象配置节,然后委托 l o b j e c t d e f m i t i o n p a r s c r 解祈对象定义,将返回 i o b j e c t d e f m i t i o n 对象定义注册到 t o b j e e t f a c t o r y 牵二 3 2 + 2 3i o b j e c t d e f i n i t i o n p a r s e r i o b j e e t d e 魁t i o n p a r s e r 接1 3 负责解析传入静对象配置节,返回对象定义 l o b j e c t d e f m i t i o n 。 - 2 s 开放式油水井施工设计系统应用研究 3 2 2 4i o b j e c t d e f i n i t i o n i o b j e d 喇舶n 接口包括对象的类型( t y p e ) 、对象的构造函数参数列表、属性列 表、事件列表等信息。 3 2 3 容器实现的辅助类 3 2 3 1 对象包装器( o b j e c t w r a p p e r ) o b j e c t w m p p e r 是容器的一个重要的辅助类,负责利用n e t 内建的反射机制读取和设 置对象盼属性a 这样将属性操作的底层细节屏蔽在辅助类中,使上层容器实现与底层平 台松散耦合。 n 翻平台内建了完整的反射机制,因此在n e t 平台实现0 b j e c 帅p e r 相对简单一 些,下面举例说明下属性设置方法。 p r i v a t e v o i ds e t p r o p e r t y v a l u e ( s t r i n gp m p e r t y n a m e , o b j e c tv a l ) b i n d i 4 v f l a g sf l a g s = b i n d i n g f l a g s p u b l i c b i n d i n g f l a g s s e t p r o p e r t e b i n d i n g f l a g s s t a t i e b i n d i n g f l a g s i n s t a n e e l b i n d i n g f l a g s i g n o r e c a 船; p r o p c r t y l n f op i 2 w r a p p c d t y p e g c t p m 蝴r o l x v t y n a m e , f l a g s ) ; p i s e t v a l u c ( w m p p e d i n s t a n c e , v a l ) ; 3 2 3 2 类型转化器回p e c o n v e r t e r ) 外部配置中对象属性一般都是字符串格式,因此容器需要将其转化为对象属性原有 类型后再赋值给属性。n e t 平台提供了类型转化器实现将一种类型的变量转化为另种 类型- 所有的类型转化器都继承自s y s 吼1 c c 粕p 0 脯n t m b d e l 命名空间下的t y p e c 0 n v e r t e r 类,并重载c a n c o n v 喇n 彻1 0 和c 叫v e 棚00 两个方法。 3 2 4 容器关键部分的实现 3 2 4 1 对象的定义及读取 容器根据定义在外部配置源中的对象定义创建对象理论上说配置源可以是属性文 件、x m l :史档、数据库等,目前根据实际需要作者只实现了血格式的配置文件。 在n 】盯平台中,对象定义在应用配置文件w e b c o n f i g 或者a p p c o n f i g 中一个独立的配置节 中,每个对象定义占用一个节点。( 咖n o d c ) 1 9 】。配置信息由自定义的i c 0 n 丘g l | | 倒0 n s 酬o n h 硒d l e r 自动读取容器初始化时,0 均e c i d e 矗枷o n r 拍d e 遍历配置节中所有对象 定义节点,针对每个节点调用o 巧e c t d 醢l 曲。n p 啦e r 解析m 节点,获取对象定义 i o b j c c t d e f i n j t i o n ,注册到容器中。实际系统的对象定义请参见下一节中施工设计系统应 - 2 6 大连理工大学琰学位论文 3 2 4 2 容器秘始纯 匡画画匡垂画匡垂国匦鲴 9 i o 懒a d d e 嘲f i n i 蛾t 0 8 n 础( x m l e l e m e n t 静)丫 | o b j c i = t d e f i n i l i o n p a r s e r ( t h i s ) 一l l 【龉 n 妇1 鹣伽n 撼n 洳? 掣妨 0 b j 剁蘸黼 s 磊毒豁警黜紫 弓黜瑟拶哙l 赢捌燃 l o b j c c t d c f m i t i o n o b j e c t d e f i n i t i o j 一一 阵 酬嘲删瞅扣 lp ”幽r o b j e c t p o s t p e 獬嘲 lp 心妯幽州,! lpc a i i f a c t o r y p o s t p r , , x :e 睁 l e p 摊凇嘲# 黼i n g l 呐啪 图3 3 容器携始纯廖剐匿 f i g 3 3c o n t a i n e r s t a r tu p s e q u e n c eg r a p h 如图3 3 的序剜图所示,容器的初始纯主要包括对象定义读取l o a d :d e 螽嘲i o n o 、用户 囊定义类型转化器注璎唾s 暾o 巧铭蛇。街嘲o r 。、耀户自定义瓣象屠处理器注瓣 r e g i s t e r o b j e c t p o s t p r o c e s s o r 0 、容器后处理器调用c a l l f a c i o r ,r p o s l p r o c c s s o r 0 、单例对象预 镪始纯瞳磷旺a l e s 涵g l 魄嘲等爨数调麓。对象定义读取已在主文书专门说绢,稻户鸯 定义类型转化器和自定义对织后处理器分别继承和 现t y p e c o n v e r t e r与 - 2 7 开放式油水井施工设计系统应用研究 i o b j e c t p o s t p r o c c s s o r 接口,容器在读取全部对象定义后,自动搜寻这些类的子类,调用 6 e t o n t o 获取引用后注册到相应列表中。容器后处理给了应用开发人员一个扩展容器 行为的机会,主要用于数据库连接字符串中用户名、口令、服务器等关键字占位符替换 等操作。单例对象预初始化主要是为了增加系统性能,在容器启动时预先初始化定义为 单例模式的对象,将它们的引用缓存起来,将来调用o e t o b j e e 的时,可以直接返回缓存 中的引用。 3 2 4 3 对象的创建 图3 4 对象创建序列图 h g 3 4o b j e c tc r e a t i o ns e q u e n c e 如图3 4 的u 儿序列图所示,对象创建会在容器初始化时预先实例化单例模式的对 象与g e 删e c t o 方法在获取非单例对象引用时被调用。对象的创建可分为三个基本步 骤:首先获取对象实例的一个引用( 此时的对象可能还处于不完整状态) ,然后通过 o 巧e c t w m l 祖具类设置对象的属性,最后进行对象创建后处理相关操作。 - 2 8 火谶理工大学硕士举位论文 对蒙引用酶获取w 戳透过调嗣宥参数豹构造舔数、无参数豹构造遵数、静态工厂方 法、实例正厂方法等获取。容器内如首先检查对敛有没有定义誓厂方法,有则调用工厂 方法仓q 建对象实例;接下来容器会检查对象有没脊定义构造函数参数,有则创建构造函 数参数裂袈,逶过反蔫蕈凝涮调矮搀遮涵数裁建鬟掌象爽镶;最蠹,懿聚醺蒙藏没骞工厂穷 法也没有定义构造黼数参数,容器就调用对絮的默认无参数构造函数,创建对象实 例。第二个阶段调用o b j e e t w r a p p e r t 具类的s e t p r o p e r t y v a l u e s 0 设置上边创建的对象实 例鲍提关骚往。属性鹣蘧可嚷逶过多 郄配置文 孛定义,瞧可戮凌容器投搀羼投豹名嚣或 类篓l 在容器内部自动释拽。 3 2 4 4 对缀引用的获取 图3 5 对象引用获取序列图 f i g 3 5g e to b j e c tr e f e r e n c es e q u e n c e 翅鬻3 5 酝示,辩缀霉l 焉熬获取裔两个遵穷,是应薅程簿蠛霈要直接弓l 瘸一个对 象,这时_ 町以直接调用容器的g 酏0 b j t o 方法;另一个是对象创建时,容器根据对象定 义在其内部自动寻找对歙依赖对象的引用,注入到对象内部时,由容器调用g e l o b j e c t o 获取。 - 2 9 - 拜绶式漓塑燕三燮墨壅璺臻! 堕 一 m 一一。 在容器内郯,g 柏巧e c l 0 方法茸先淡耀g 鼹堍l e 鼢1 0 在革铡对象缓存浊中寻找该对 象的弓| 角,翔我翻,壹接邋潮该弓l 瑶,答强g 调瘸8 艚0 翰e c l d e 岛i 垃滟o 在容器静对象定义 池中获取该对镦的定义,然臌调用对象创娥函数c r 蜘t e ( 婀t o 实例化该对象,最后潺回 新对象的引用。如果新建对裂属于单莎4 对壤,调用黜喀s 悯i l l l 4 e 自嘲o 将其加入到单例对 象缓存邀孛。 3 2 4 5 用户自定义对象行为扩展 如果应用开发人员想在对歙被容器初始化完成前后作些操作的话,除了可以实现 r n i t i a l i z e d o b j e c t 接t z i 垂容器舞动谖惩其烈融醚蛙8 l 妇蜘q 方法,或耆奁簿象定义时叁涎撞 寇对象襁始纯亮毕后容器调潮的圃调方法外,对于一些遇用盼后处理功能,系统还褥供 了一个i o 坷e c 蟥 o 难i d c e s s o r 接口。 i o k e c l p o 蹦吣。鼯s d r 接口麓蕊个匿调穷法:p o s t p r o c c s s & f o r 0 秘p o s 蠖吣c

温馨提示

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

评论

0/150

提交评论