(计算机应用技术专业论文)基于spring实现j2ee企业应用开发框架的研究与应用.pdf_第1页
(计算机应用技术专业论文)基于spring实现j2ee企业应用开发框架的研究与应用.pdf_第2页
(计算机应用技术专业论文)基于spring实现j2ee企业应用开发框架的研究与应用.pdf_第3页
(计算机应用技术专业论文)基于spring实现j2ee企业应用开发框架的研究与应用.pdf_第4页
(计算机应用技术专业论文)基于spring实现j2ee企业应用开发框架的研究与应用.pdf_第5页
已阅读5页,还剩69页未读 继续免费阅读

(计算机应用技术专业论文)基于spring实现j2ee企业应用开发框架的研究与应用.pdf.pdf 免费下载

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

文档简介

武汉理工大学硕士学位论文 摘要 软件开发框架的研究一直是软件开发者关注的课题。框架提供了大粒度软 件复用的新途径,提高了软件开发的效率。因而如何设计并构建一个强健而稳 定的框架一直是众多软件开发者致力研究的目标。 目前企业级应用软件的解决方案主要采用j 2 e e 平台,解决方案如下:表示 层由j s p + w e b 服务器构成;业务层由e j b 容器构成,通常是应用服务器,这是 中间的一层;持久层主要通过写j d b c 代码来操作数据库的形式实现。这种方案 的不足表现在以下方面:部署或应用e j b 的成本高;e j b 本身规定的编程规范 限制了开发思想;e j b 事务处理方面的不足;e j b 调用服务机制的不足;持久化 处理方面存在的不足。 运用j s p 、j a v as e r v i a 、e j b 以及j d b c 构建企业级应用程序满足了当前的 开发需求,但是这种架构仍存在一些弊端。伴随着软件开发技术的发展,在多 层的软件开发项目中,可复用易扩展的,而且是经过良好测试的软件组件,越 来越为开发者所青睐。这意味着开发人员可以将充裕的时间用在分析、构建业 务逻辑的应用上,而非繁杂的代码编程上。于是开发人员将相同类型问题的解 决途径进行抽象,抽取成一个应用框架。利用这些框架构建的分布式应用程序 完美的实现了应用程序高内聚、低耦合、高弹性、易维护的优点。 本文引入了来自开源社区的s p r i n g 框架,通过分析其原理和实现,重点剖 析了其两大核心机制i o c 和a o p ,详述了其事务管理机制和对o r m 的支持, 指出基于这两个核心机制的s p r i n g 框架完全适用于一般企业级应用开发的大部 分功能和性能的要求。由于s p r i n g 本身“无侵入性”的特点,它又可以方便地 集成h i b e r n a t e 对象,关系映射方案来取代e j b 的e n t i t yb e a n 解决方案,并可集 成优秀的w e b 层框架s t r u t s 。 在此基础上,本文提出以s p r i n g 框架为核心、集成h i b e r n a t e 和s t r u t s 的应 用开发方案,并将s t r u t s s p r i n g h i b e r n a t e 这种技术组合应用到电子政务的实现 中,对办公自动化系统进行详细分析设计和实现。开发结果表明,整个系统具 有平台无关性,并提高了应用系统的可维护性、可扩展性、可移植性和组件的 可复用性。 关键词:1 2 e e 、s p r i n g 、反转控制、面向切面的编程、电子政务 武汉理工大学硕士学位论文 a b s t r a c t s o f t w a r ed e v e l o p e r sm o s t l yf o c u so nt h er e s e a r c ho ft h es o f t w a r ed e v e l o p m e n t f i a m e w o r k h o wt ob u i l das t u r d ya n ds t a b l ef r a m e w o r ki st h ea i mo fs o m es o f t w a r e a r c h i t e c t u r ee x p e r t s s i n c et h er i s eo fs o f t w a r ee n g i n e e r i n g , f r a m e w o r kh a sb e c o m e t h eb a s i co fm o d e r ns o f t w a r ed e v e l o p m e n t t h ef r a m e w o r kg i v ean e ww a yf o r s o f t w a r er e u s ei nb i gg r a n u l a r , a n dm a k et h ed e v e l o p m e n tm o r ee f f e c t i v e n o ww em o s t l yu s ej 2 e ep l a t f o r mt o d e v e l o pt h ee n t e r p r i s ea p p l i c a t i o n s o f t w a r e t h es o l u t i o ni sa sf o l l o w :t h ev i e wl e v e lc o n s t i t u t e sb yj s pa n dw e b s e r v e r ;t h eb u s i n e s sl e v e l c o n s t i t u t e s b yt h e e j bv e s s e lw h i c hi su s u a l l yt h e a p p l i c a t i o ns e r v e r , a n dt h i si sm i d d l el e v e l ;t h ep e r s i s t e n c el e v e lm a i n l yi sr e a l i z e db y c o m p i l i n gt h ej d b cc o d et oo p e r 越et h ed a t a b a s e t h ed i s a d v a n t a g e so ft h i sk i n do f s c h e m ea r er e p r e s e n t e di nb e l o wa s p e c t :t h ed e p l o y m e n to ra p p l i e se j bp r o j e c t w h o s ec o s tt ob eh i g h ;e j bi t s e l fp r e s c r i b et h ep r o g r a m m i n gs t a n d a r dw h i c hh a s l i m i t e dt h ed e v e l o p m e n tt h o u g h t ;t h ee j bb u s i n e s sp r o c e s s e sh a ss o m es h o r t a g e s ; e j bt r a n s f e rs e r v i c em e c h a n i s mh a ss o m es h o r t a g e s ;t h el a s t i n gp r o c e s s i n ga s p e c t e x i s t ss c a r c i t y c o n s t r u c t e dt h ee n t e r p r i s el e v e la p p l i c a t i o np r o c e d u r eu s i n gj s p , j a v as e r v l e t , e j ba n dj d b ct om e e tt h ec u n - e n td e v e l o p m e n tn e e d ,b u tt h i sk i n do f f r a m e w o r ks t i l l h a ds o m el i m i t a t i o n a st h ed e v e l o p m e n to f t h es o f t w a r et e c h n o l o g y , i nt h ep r o j e c to f m u l t i l a y e r e ds o f t w a r ed e v e l o p m e n t ,e a s yt or e u s ea n de x p a n d ,a n di ti sp a s s e st l l r o u g h t h eg o o dt e s ts o f t w a r em o d u l e ,w h i c ha r em o r ea n dm o r ef a v o r sf o rt h ed e v e l o p e r s , t h i si sm e a nt h a tt h ed e v e l o p e r sm a ys p e n dt h ea b u n d a n tt i m et oa n a l y z ea n d c o n s t r u c tt h es e r v i c el o g i ci nt h ea p p l i c a t i o n , b u ti nn o n n u m e r o u sa n dd i v e r s ec o d e p r o g r a m m i n g a n dt h e nt h ed e v e l o p e r sa b s t r a c tt h es a m et y p eq u e s t i o na n de x t r a c ta n a p p l i c a t i o nf r a m e w o r k w ec o n s t r u c tt h ed i s t r i b u t i o n a la p p l i c a t i o np r o c e d u r ew h i c h p e r f e c t l yr e a l i z et h em e r i to ft h ea p p l i c a t i o np r o c e d u r ew h i c hi n c l u d i n gt h eh i g h c o h e s i o n , t h el o wc o n j u n c t i o n , t h eh i g he l a s t i c i t y , t h eh i g hm a i n t a i n a b i l i t yb yu s i n g t h e s ef r a m e w o r k s t h i sp a p e ru t i l i z et h es p r i n gf r a m e w o r ko r i g i n a t i n gf r o mo p e ns o u r c e sf o r u m , 武汉理工大学硕士学位论文 a n dd i s s e c ti t st w ok e ym e c h a n i s m s - i o ca n da o pb ya n a l y z i n gi t s p r i n c i p l ea n d r e a l i z a t i o n i ta l s op o i n t so u tt h a tt h es p r i n gf r a m e w o r kb a s e do nt h e s et w ok e y m e c h a n i s m sc a t e rt ot h er e q u i r e m e n to ff u n c t i o na n dp e r f o r m a n c ef o r g e n e r a l e n t e r p r i s ea p p l i c a t i o nd e v e l o p m e n td u et oi t st r f i to f ”n oi n t r u s i v e n e s s ”,t h es p r i n g f r a m e w o r kc a ne a s i l yi n t e g r a t eh i b e r n a t et or e p l a c ee j b se n t i t yb e a no rm a p p i n g s o l u t i o na n de x c e l l e n ts t r u t sf r a m e w o r k j u s tb e c a u s eo ft h ea b o v em e n t i o n e dp o i n t gf r a m e w o r kb a s e do np a p e rp u t s f o r w a r dak i n do f n e ww e ba p p l i c a t i o ns p r i n gf r a m e w o r k , w h i c hi n t e g r a t e sh i b e r n a t e a n ds t r u t s ,a n dt h e n , t h et e c h n o l o g yc o m b i n a t i o no fs t r u t s s p r i n g h i b e r n a t ei s a p p l i e dt od e v e l o p m e n to fe g as y s t e ma n dd e s i g n st h eo as y s t e mi nd e t a i l t h e r e s u l t ss h o wt h a tt h es y s t e mi si n d e p e n d e n to fp l a t f o r ma n dm a i n t a i n a b l e , e x p a n s i b l e a n dr e u s a b l e k e y w o r d s :j 2 e e ,s p r i n g ,i o c ,a o p , e g a 武汉理工大学硕士学位论文 1 1 研究背景 第1 章绪论 软件技术发展到今天,软件规模不断扩大,复杂度日渐升级,开发人 员面临的问题也越来越多,解决方案也百花齐放。设计者或者开发人员如 何将新的设计或者开发建立在以往工作的基础上,复用以往成功的案例。 因此,人们越来越意识到软件重用技术的重要性,设计模式1 i 】和框架应运 而生。开源软件的兴起,使得框架更是层出不穷。 架构1 2 】是软件系统从整体到部分的最高层次的划分,一般由多个不同 领域的框架组成。一个成功的软件需要有一个成功的架构,但软件架构的 建立是一个复杂而又持续改进的过程,软件人员不可能对每个不同的项目 做不同的架构,而总是尽量重用以前的架构,或开发出尽量通用的架构方 案。 如何在众多的框架中选择建立适合企业应用的架构,并且怎样让各个 应用层无缝连接? 如何整合框架以便让各个层以一种松散祸合的方式彼 此作用而不用管底层的技术细节? 这给软件人员提出了挑战和机遇。 1 2 研究的目标与意义 通过研究s p r i n g 框架1 3 | 1 4 】的具体实现机制和功能可以帮助程序开发人 员解决许多问题而无需使用e j b 。s p r i n g 能提供一种e j b 的替换物,它们 适用于许多w e b 应用。例如,s p r i n g 的i o c 机制能够使容器不侵入应用程 序本身。应用程序本身提供好介面,容器可以透过这些介面将所需的资源 注入到程序中,应用程序不向容器主动要求资源,故而不会依赖于容器的 元件,应用程序本身不会意识到正被容器使用,可以随时从容器中脱离而 不用作任何的修改,而这个特性正是些业务逻辑中问件最需要的。 s p r i n g 能使用a o p 提供声明性事务管理而不通过e j b 容器,如果你 仅仅需要与单个数据库打交道,甚至不需要一个j t a 实现。s p r i n g 为数据 存取提供了一个致的框架,不论使用的是j d b c 还是o r m a p p i n g 产品 ( 如h i b e r n a t e 、i b a t i s 等) 。 武汉理工大学硕士学位论文 s p r i n g 确实能通过最简单可行的解决办法来解决大多数的问题。同时 由于s p r i n g 框架本身提供了大量的应用程序接口使得其它优秀的框架技 术可以整合到s p r i n g 框架中来共同提供高效低耦合的代码,这样可以在最 大程度上实现功能完善的程序,而这对于程序开发人员来说是有很大价值 和吸引力的地方。 1 3 项目来源 2 0 0 2 年,国家信息化领导小组决定,把电子政务建设作为今后一个时 期我国信息化工作的重点,政府先行,以带动国民经济和社会发展信息化。 根据国家信息化领导小组关于我国电子政务建设的指导意见( 中 办发 2 0 0 2 】1 7 号文件) 的精神,经国务院领导同志同意,由国务院办公厅 和科技部共同组织实施电子政务试点示范工程( 以下简称“试点示范工 程”) 。国务院办公厅关于实施电子政务试点示范工程的通知( 国办函 2 0 0 2 7 4 号文件) 确定试点示范工程的主要任务是:依托个公共体系、 构建两种支撑平台、推进三类示范应用。其中,重点在国务院办公厅构建 统一的安全和应用支撑平台,其他试点示范单位按照统一管理规范和技术 标准,结合各自的实际情况构建相应的平台。 广东省党政内网应用支撑平台及办公自动化系统整合试点示范项目 建设是从广东省实际出发,立足于广东省的实际需求,充分借鉴中办、国 办电子政务示范工程取得的成果和经验,建设适合于广东省、面向未来发 展需要的广东省党政内网应用支撑平台以及应用系统。她实现了在信息安 全的前提下,广东省委省政府与国办电子政务平台的互联互通,资源共享、 协同办公。 本人自从2 0 0 6 年参与该项目以来,主要从事广东省委办公厅督查室 办公自动化系统的开发工作,期间查阅了大量相关文献,系统学习了s p r i n g 框架相关知识。同时,在实际设计开发过程中,积极认真地开展工作,构 建个以s p r i n g 框架为基础,在显示层和数据持久层整合其他优秀框架, 并在项目中加以运用。实现了提高开发效率、减少开发上作量、规范开发 行为的目标。 2 武汉理工大学硕士学位论文 1 4 本文工作及创新点 1 4 1 本文主要工作 为克服j 2 e e 架构p 】的w e b 应用解决方案中存在的一些不足,寻找新 的解决方法,针对目前轻量级开发框架s p r i n g 的关键技术进行了研究,分 析了日前几种框架的核心技术诸如:s t r u t s 、h i b e r n a t e 、i b a t i s 等,并探讨 在s p r i n g 框架中进行整合的可行性,找到符合企业级应用软件系统需求特 点的开发方法,通过s p r i n g 框架整合j 2 e e 多层架构中w e b 层、业务层和 持久层的相关组件,充分发挥每个组件的优势。结合一个电子政务项目, 详细介绍了如何利用s p r i n g 框架进行企业应用系统的开发,并整合其他框 架的过程。 1 4 2 本文创新点 由于s p r i n g 框架具有的无侵入性( n oi n t r u s i v e n e s s ) 并且易于和其它 框架集成的特点,本文详细介绍了s p r i n g 框架并且剖析了它的两大中心机 制i o c 和a o p ;并提出以s p r i n g 框架为核心的构建j 2 e e 企业应用开发框 架t 6 l 。该框架由p r e s e n t a t i o n ( 表示层) ,p e r s i s t e n c e ( 持久层) ,b u s i n e s s ( 业务层) 组成。在框架的表示层引入s t r u t s 实现用户与系统之间的交互, 持久层引入h i b e r n a t 实现o r 映射的功能。最后将这个框架应用到电子政 务系统的实现中。 1 5 论文结构 本文内容章节安排如下: 第1 章介绍了本文研究背景,研究目的及意义,项目来源和开发平台, 同时对全文的结构进行了介绍。 第2 章介绍了s p r i n g 框架的概念、特点,体系结构及框架关键域。 第3 章介绍了s p r i n g 框架的核心技术内容,对其他框架的支持等。 第4 章将s p r i n g 框架运用到一个电子政务实例中,详细描述系统的分 析、设计及实现。 武汉理工大学硕士学位论文 第5 章全文进行了总结及展望。 1 6 缩略语 a o p :a s p e c to r i e n t e dp r o g r a m m i n g c g l i b :c o d eg e n e r a t i o nl i b r a r y c m t :c o n t a i n e r - m a n a g e dt r a n s a c t i o n c m p :c o n t a i n e r m a n a g e dp e r s i s t e n c e d a 0 :d a t a a c c e s so b j e c t d i :d e p e n d e n c yi n j e c t i o n d t o :d a t at r a n s f e ro b j e c t e g a :e l e c t r o n i cg o v e r n m e n ta f r a i r e i s :e n t e r p r i s ei n f o r m a t i o ns y s t e m e j b :e n t e r p r i s ej a v ab e a n g o f :g a n go ff o u r ( t h eb o o k :e l e m e n t so fr e u s a b l eo b j e c t o r i e n t e d s o f t w a r e ,w h o s ea u t h o r sa r ee r i c hg a m m a ,r i c h a r dh e l m ,r a l p hj o h n s o n , j o h nv l i s s i d e s ) i o c :i n v e r s i o no f c o n t r o l j 2 e e :j a v a2p l a t f o r me n t e r p r i s ee d i t i o n j d b c :j a v ad a t a b a s ec o n n e c t i v i t y j d o :j a v ad a t a0 b j e c t j n d i :j a v an a m i n ga n dd i r e c t o r yi n t e r f a c e j s p :j a v as e r v e rp a g e s j s t l :j a v as t a n d a r dt a gl i b r a r y j t a :j a v at r a n s a c t i o na p i m v c :m o d e l v i e w , c o n t r o l l e r o o p o b j e c to r i e n t e dp r o g r a m m i n g o r _ m :o b j e c tr e l a t i o n a lm a p p i n g p o j o :p l a i no l dj a v ao b j e c t s 4 武汉理工大学硕士学位论文 第2 章s p r i n g 框架概述 2 1 轻量级容器 s p r i n g 框架是一个2 0 0 3 年2 月才出现的开源框架,该框架起源自r o d j o h n s o n 在2 0 0 2 年末出版的e x p e go n e o n o n e :j 2 e ed e s i g na n d d e v e l o p m e n d 【7 l 一书中的基础性代码,在该书中,r o dj o h n s o n 倡导j 2 e e 实用主义的设计思想,而s p r i n g 框架【8 正是这一思想的更全面和具体的实 现。截至目前为s p r i n gf r a m e w o r k2 0 5 版。 s p r i n g 是为简化企业级应用开发而诞生的,它使用简单的j a v a b e a n 来实现以前那些只有e j b 才能实现的功能,它是一个从实际项目开发经验 中抽取的、可高度重用的应用框架。 简单地说,s p r i n g 是一个轻量级的i o c ( 控制反转) 和a o p ( 面向切 面编程) 容器框架 9 1 。这句话概括了s p r i n g 的重要特点,说明如下: 轻量级 从大小和系统开支上说s p r i n g 都算是轻量级的。完整的s p r i n g 框架 可以在一个大小只有1 m b 多的j a r 文件里发布。并且s p r i n g 所需的处理 开销也是微不足道的。s p r i n g 的设计哲学是提供一种无侵入式的高度可扩 展框架,基于s p r i n g 开发的系统中的对象一般不依赖于s p r i n g 的类,即 无需代码中涉及s p r i n g 专有类,就可将其纳入s p r i n g 容器进行管理。 i o c 即反转控制,s p r i n g 提倡使用i o c 来实现松耦合,由容器控制对象之 间的依赖关系,这样就减轻了组件之间的依赖关系,提高了组件的可移植 性。i o c 是s p r i n g 框架的基础和精髓,在后面的章节会对其进行详细讨论。 aop 即面向切面编程,s p r i n g 对面向切面编程提供了强大支持,通过将业 务逻辑从系统服务( 如监控和事物管理) 中分离出来,实现了内聚开发。 容器 s p r i n g 是一个容器,它包含并且管理系统对象的生命周期和配置。 s p r i n g 容器使用i o c 管理所有组成应用系统的组件,这使得它有别于传统 5 武汉理工大学硕士学位论文 的重量级e j b 容器。 框架 s p r i n g 实现了使用简单的组件配置组合成一个复杂的系统,在s p r i n g 框架中,系统中的对象是通过x m l 文件配置组合起来的。并且s p r i n g 提 供了很多基础功能( 如:事物管理、持久层集成等) ,这使得开发人员能 够专注于开发应用逻辑。 s p r i n g 的所有这些特性使应用系统的开发更为简单,代码更为清晰, 更易于管理,更易于测试。 2 2 框架特点 s p r i n g 关注的领域是其他许多流行的框架未曾关注的,它是一种管理 业务对象的方法。 s p r i n g 既是全面的又是模块化的。s p r i n g 具有分层的体系结构,这意 味着能选择性地使用任何一个独立的部分;而它的架构又是内部一致,因 此可从它的整体结构来得到最大的价值。 s p r i n g 从设计的开始就考虑测试的便利性,它是使用测试驱动开发工 程的理想框架。 s p r i n g 不会给应用系统添加对其他框架的依赖。s p r i n g 是个一站式的 解决方案,它提供了典型应用所需要的大部分基础架构,并涉及了其他框 架没有考虑到的内容。 2 3 框架优点 s p r i n g 消除了许多工程中对单粒模式( s i n g l e t o n ) 1 0 】的泛滥使用,因 为s i n g l e t o n 的使用降低了系统的可测试性和面向对象的程度。 s p r i n g 在不同应用程序和项目中使用统的方法来处理配置文件,并 取消对不同定义文件的属性需求。在s p r i n g 环境下,仅通过查看类的 j a v a b e a n 属性,可得到某个类的属性项或系统属性,而不用去研究j a v a 文档或者是源编码。 s p r i n g 框架提供了良好的编程风格,用它创建的应用项目对提供的 6 武汉理1 二大学硕士学位论文 a p i s 依赖甚少。 s p r i n g 推祟用对接口编程而不是对类编程,将应用系统对s p r i n g 的依 赖降到最低,并具有很强的可移植性,所以s p r i n g 在w e b 应用服务器之 间是可移植的。 s p r i n g 构建的应用项目容易进行测试、驱动与开发。 s p r i n g 使e j b 的实现成为一种选择,而不是应用架构的必然选择。如 选用p o j o s 或l o c a le j b s 实现业务接口,却不会影响代码的调用。 s p r i n g 提供一种e j b 的替代物,它适用于许多w e b 应用。例如,s p r i n g 能不通过e j b 容器,由a o p 方式提供声明性事务管理服务,同样如果只 需要与单个数据库打交道,也可用j t a 实现。 s p r i n g 为数据存取提供了一致性的框架,不论使用的是j d b c 还是o r m a p p i n g 产品( 如h i b e r n a t e 、i b a t i s 等) 。 s p r i n g 的最大的优点是通过简单可行的方法来解决普遍共性问题。 2 4 体系结构1 1 1 2 】 s p r i n g 框架是一个分层架构,由七个定义良好的模块组成。s p r i n g 模 块构建在核心容器之上,核心容器定义了创建、配置和管理b e a n 的方式。 如图2 1 所示,组成s p r i n g 框架的每个模块( 或组件) 都可以单独存 在,或者与其他一个或多个模块联合实现。每个模块的功能如下: 图2 - is p r i n g 框架的七个模块 核心容器:核心容器提供s p r i n g 框架的基本功能。核心容器的主 7 武汉理工大学硕士学位论文 要组件是b e a n f a c t o r y ,它是工厂模式的实现。b e a n f a c t o r y 使用控制反转 ( i o c ) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 s p r i n g 上下文:s p r i n g 上下文是一个配置文件,向s p r i n g 框架提 供上下文信息。s p r i n g 上下文包括企业服务,例如j n d i 、e j b 、电子邮件、 国际化、校验和调度功能。 s p r i n ga o p :通过配置管理特性,s p r i n ga o p 模块直接将面向切 面的编程功能集成到了s p r i n g 框架中。所以,可以很容易地使s p r i n g 框 架管理的任何对象支持a o p 。s p r i n ga o p 模块为基于s p r i n g 的应用程序 中的对象提供了事务管理服务。通过使用s p r i n ga o p ,不用依赖e j b 组件, 就可以将声明性事务管理集成到应用程序中。 s p r i n gd a o :j d b cd a o 抽象层提供了有意义的异常层次结构, 可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层 次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量( 例 如打开和关闭连接) 。s p r i n gd a o 面向j d b c 的异常遵从通用的d a o 异 常层次结构。 s p r i n go r m :s p r i n g 框架插入了若干个o r m 框架,从而提供了 o r m 的对象关系工具,其中包括j d o 、h i b e r n a t e 和i b a t i ss q lm a p 。所 有这些都遵从s p r i n g 的通用事务和d a o 异常层次结构。 s p r i n gw e b 模块:w e b 上下文模块建立在应用程序上下文模块之 上,为基于w e b 的应用程序提供了上下文。所以s p r i n g 框架支持与j a k a r t a s t r u t s 的集成。w e b 模块还简化了处理多部分请求以及将请求参数绑定到 域对象的工作。 s p r i n gm v c 框架:m v c 框架是一个全功能的构建w e b 应用程序 的m v c 实现。通过策略接e 1 ,m v c 框架变成为高度可配置的,m v c 容 纳了大量视图技术,其中包括j s p 、v e l o c i t y 、t i l e s 、i t e x t 和p o i 。 s p r i n g 框架的功能可以用在任何j 2 e e 服务器中,大多数功能也适用 于不受管理的环境。s p r i n g 的核心要点是:支持不绑定到特定j 2 e e 服务 的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同j 2 e e 环境( w e b 或e j b ) 、独立应用程序、测试环境之间重用。 武汉理工大学硕士学位论文 第3 章s p r i n g 核心技术 3 1 反转控制依赖注入模式 3 1 1 反转控制依赖注入的概念 反转控制( i o c ,i n v e r s i o no fc o n t r 0 1 ) i ”j ,又称依赖注入( d i , d e p e n d e n c yi n j e c t i o n ) ,是面向对象领域新兴的编程思想,也是s p r i n g 的 精髓所在。简单地说,i o c 就是指由容器来控制程序之间的关系,而非传 统实现中的由程序代码直接操控。这也就是所谓“反转控制”的概念所在: 控制权由应用代码转到外部容器,控制权的转移,也就是所谓的反转。 i o c 背后的概念经常表述为h o l l y w o o d 原则:“d o n tc a l lm e ,i l l c a l l y o u ”。l o c 将控制创建的职责搬进了框架中,并把它从应用代码脱离开来。 在传统的容器体系结构中( 如e j b ) ,一个组件可以调用容器并问:“我需 要的工作对象x 在哪里? ”而使用i o c 容器则只需指出组件需要x 对象, 在运行时容器会提供给它。容器是通过查看方法的参数表( 例如j a v a b e a n 的属性) 做到的,也可能是根据配置数据如x m l 来实现的。 在面向对象设计过程中经常涉及到一个对象引用另一个对象,如图 3 1 所示,对象a 直接引用对象b ,这样就导致了对象a 依赖于对象b , 而且,随着开发的不断深入和需求的变化,这种依赖迁移的时间和次数不 可预知,如果系统中存在多处这样的依赖关系,那么系统的演化和维护将 会变得异常困难。 n何) 弋厂 囱 图3 - 1i o c 原理图 i o c 被用来改变这种不利的局面,它把对象a 对对象b 的依赖反转过 来:让a 和b 各自独立的变化,仅仅当a 在需要调用b 的时候通过i o c 一9+i詈l乡o ,詈l 武汉理工大学硕士学位论文 容器将依赖关系主动注入到a 中,完成依赖的传递,使得b 对a 可用, 这样当对象b 改变时a 可以保持不变,这种对依赖的控制由直接主动变 为间接被动的过程大大增加了系统的灵活性、扩展性和可维护性。i o c 的 注入模式共有三种,将会在下一节详细介绍。对于框架而言,i o c 实现使 用容器来控制程序之间的关系,而不是由程序代码直接操控,即控制权由 应用代码转移到了外部容器,由外部容器来管理组件之阃的依赖关系。 3 1 2 反转控制优点 可见,使用i o c 模式,能够提供一下几方面的优势1 1 4 】: l 、可测试能力。使用方法向对象传递对象,而不需要创建对象用于 获取组件的容器。 2 、组件自描述。当需要初始化一个组件时,可以很容易得知该组件 需要哪些依赖对象( 组件) 而不需要查看源代码,文档或示例。 3 、使用反射很容易发现依赖关系。从图表生成到运行时优化都会带 来好处。 4 、避免使用超大工厂设计模式( 应用的全部组件都保存在一个类中) , 这直接导致与某些类的紧密绑定而难于直接使用一个类。 5 、每个类仅和真正使用它的类耦合。这种方法鼓励每个类承担更少 的责任,从而产生更清晰的设计。 6 、允许与环境( c o n t e x t ) 隔离并可以绕过。t h r e a dl o c a l 在w e b 应 用中可能很合适,但并不一定适合高并发的同步应用。 因此,通过使用i o c ,能够降低组件之间的耦合度,达到提高类的重 用性,易于测试的目的。并且,整个系统更易于集成和配置。 3 1 3 反转控制模式的分类 反转控制模式根据其实现方法是否具有侵入性,可以分为两种:依赖 查找和依赖注入,如图3 2 所示。 依赖查找是侵入性的,对象中方法的实现与具体的容器或框架相关, 他们通过容器的a p i 来查找相关的资源,一般由接口注入( i n t e r f a c e i n j e c t i o n ) 实现。 l o 武汉理工大学硕士学位论文 鏖一 ,f j 、j ,? j ?。? 。j ,?i?j?j。|l 上面的代码中,c 1 a s s a 依赖于i n t e r f a c e b 的实现,要获得i n t e r f a c e b 实现类的实例,传统的方法是在代码中创建i n t e r f a c e b 实现类的实例,并 将其赋予c 1 a s s b 。而这样一来,c 1 a s s a 在编译期间即依赖于i n t e r f a c e b 的实现。为了将调用者与实现者在编译期分离,可以根据预先在配置文件 中设定的实现类的类名( 如上面代码中的c o n f i g b i m p l e m e n t a t i o n ) ,利用 j a v a 反射机制动态加载实现类,然后通过i n t e r f a c e b 强制转型后为c l a s s a 所用,这是接口注入的一个最原始的雏形。 而对于接口注入类型的i o c 容器,加载接口实现并创建其实例的工作 武汉理工大学硕士学位论文 由容器完成。如下面代码所示: ;p u b l i cc l a s sc l a s s a f t p r i v a t ei n t e r f a c e bc 1a s s b ; ,p u b l i co b j e c tm e t h o d x ( i n t e r f a c e bb ) f c l a s s b = b ; 7, j 接口注入的主要优点是可以不需要外部的配置文件配置组件,只要实 现指定的接1 2 1 ,i o c 框架自动实现协作对象的组合,但是这样和框架或容 器自身细节关系比较紧密,不利于移植和复用,所以前景不被看好。 设值注入( s e t t e ri n j e c t i o n ) 设值注入模式在实际开发中应用的最为广泛,它利用属性注入( s e t t e r 方法) 的方法完成依赖注入,显得更为直观,更为自然。如下面的代码所 示: ,7,7,y p u b l i cc l a s sc l a s s x , t p r i v a t es t r i n gm e s s a g e ; j p u b l i cv o i ds e t m e s s a g e ( s t r i n gm s g ) m e s s a g e = m s g ; : ), , 。t 貔? ? 、?,。j ,j ? i , ?r 一一 - ,口 然而对于属性显式的设置从一定程度上破坏了封装原则,并且属性初 始化的先后顺序无法保证,因而导致一些安全隐患,并可能使得程序模块 在容器内外的行为不一致。 构造方法注入( c o n s t r u c t o ri n j e c t i o n ) 构造方法注入即通过构造函数完成依赖关系的设定,依赖关系通过类 构造函数建立,容器通过调用类的构造方法,将其所需的依赖关系注入其 中。下面的代码就是一个最简单的构造注入的实现: ;p u b l i cc l a s sc o n s t r u c t o r x 缓一,p r i v a t es t r i n g m e s s a g e ;一 z 7 t ,1 ,? ? ,j ? ,j ,一j t 呜 武汉理t 大学硕士学位论文 :p u b l i cc o n s t r u c t o r x ( s t “n gm s g ) ; m e s s a g c = m s g ; 。 ) 荔 构造函数注入法的优势就是通过构造函数来强制依赖关系,这样生成 的类在创建后就具备了所需的必要的参数,保证了不会实例化不完全的或 无法使用的类。 3 1 4 几种依赖注入形式的比较 接口注入模式因为历史较为悠久,在很多容器中都已经得到了应用。 但由于其在灵活性、易用性上不如其他两种注入模式,因而在相关的开发 人员中并不被看好。 设值注入模式和构造方法注入模式则是目前主流的i o c 实现模式。这 两种实现方式各有特点,也各具优势。 设值注入的优势: ( i ) 对于习惯了传统,j a v a b e a n 开发的程序员而言,通过s e t t e r 方 法设定依赖关系显得更加直观,更加自然。 ( 2 ) 如果依赖关系( 或继承关系) 较为复杂,那么构造注入模式的 构造函数也会相当庞大( 需要在构造函数中设定所有依赖关系) ,此时设 值注入模式往往更为简洁。 ( 3 ) 对于某些第三方类库而言,可能要求组件必须提供一个默认的 构造函数( 如s t r u t s 中的a c t i o n ) ,此时的依赖注入机制就体现出其局限 性,难以完成我们期望的功能。 构造方法注入的优势: ( 1 ) “在构造期即创建一个完整、合法的对象”,对于这条j a v a 设计 原则,构造方法注入无疑是最好的响应者。 ( 2 ) 避免了繁琐的设值方法的编写,所有依赖关系均在构造函数中, 更加易读。 ( 3 ) 由于没有设值方法,依赖关系在构造时由容器一次性设定,因 此组件在被创建之后即处于相对“不变”的稳定状态,无需担心上层代码 武汉理工大学硕士学位论文 在调用过程中执行设值方法对组件依赖关系产生破坏,特别是对于 s i n g l e t o n 模式的组件而言

温馨提示

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

评论

0/150

提交评论