开源技术Struts、Spring、Hibernate(5)
北方民族大学硕士学位论文 开源技术Struts,Spring,Hibernate在MIS开发中的应用研究
己决定在哪里执行校验规则。 Spring本身有对ORM支持和JPA、Hibernate、JDO以及iBatis操作的集成。例如使用Hibernate,你可复用已经存在的映射文件与标准的Hibernate SessionFactory 配置。用控制器去无缝整合Web层和领域模型,消除对 ActionForms 的依赖,或者避免了其他class为领域模型转换HTTP参数的需要。
图3.8使用了第三方框架的Spring中间层
有时候现有情况不允许你彻底从一种框架切换到另一种框架。然而,Spring却不需要强制你使用它的全部,Spring不是一种全有全无的解决方案,就像图3.8所示。如果,现有的应用使用了WebWork、Struts、Tapestry或其他的UI框架作为前端程序,完全可以只与Spring的事务特性进行集成。只需要使用 ApplicationContext 来挂接你的业务逻辑和通过 WebApplicationContext 来集成你的Web层前端程序[15]。
图 3.9 远程使用场景
当你需要通过Web服务来访问你的现有代码时,你可使用Spring提供的 Hessian-、Burlap-、Rmi- 为前缀的接口或者 JaxRpcProxyFactory 这个代理类。你会发现,远程访问现有应用程序不再那么困难了。解决方案类似于上图3.9。
-20-
北方民族大学硕士学位论文 开源技术Struts,Spring,Hibernate在MIS开发中的应用研究
图3.10 EJBs包装现有的POJOs
像上图3.102所描绘的,Spring还为EJB提供了数据访问和抽象层,让你可以复用已存在的POJO并将它们包装在无状态SessionBean中,以便在可能需要声明式安全的非安全的Web应用中使用[16]。
按照Spring框架的思想:把Spring看作一个标准开发组件,根据自己的需要,只取用它的部分组件使用而无需涉及其他,本文的整合框架重点使用Spring的依赖注入(DI)和面向切面编程(AOP),下文对它们进行详细介绍
3.2.1依赖注入(DI)
当我们进行项目开发时,我们将一个复杂的系统进行有效的划分,形成多个模块,这样可以使我们有效的理解和控制整个系统,使每个模块都能易于理解和维护。但是模块之间以某种方式进行信息交换的时候,模块和模块之间就不可避免的 发生了某种混合关系。如果各个模块之间没有任何的关联,那么该模块不属于此系统,或者整个软件不过是互不相干的系统的简单堆积,对每一个系统其所有功能均在一个模块中实现,这等于没有做任何模块的分解。从这种意义上说来,模块间的依赖关系是不可避免的。但是,如果模块间耦合关系过强则会给我们带来很大的麻烦,对整个系统来说会造成很大的危害。特别是当需求发生变化时,代码的维护将是一个灾难。因此,我们要尽可能的消解模块间不必要的耦合,尽量提高系统的质量。IoC ( Inver -sion of Control)模式,即控制反转,就是为了要解决模块间的耦合 ,依赖注入(DependencyInjection)是对IoC模式的一种扩展的解释。IoC是一种用来解决组件(实际上也可以是简单的Java类)之间依赖关系、配置及生命周期的设计模式,对组件依赖关系的处理是IoC的精华部分。其中IoC的实际意义就是把组件之间的依赖关系提取(反转)出来,由容器来具体配置。这样,各个组件之间就不存在hard-code的关联,任何组件都可以最大程度的得到重用。而运用了IoC模式后,我们不再需要自己管理组件之间的依赖关系,只需要声明由容器去实现这种依赖关系.就好像把对组件之间依赖关系的控制进行了倒置,不再由组件自己来建立这种依赖关系而交给容器去管理。如图3.11。
-21-
北方民族大学硕士学位论文 开源技术Struts,Spring,Hibernate在MIS开发中的应用研究
图3.11 普通依赖关系与IoC原理对比图
依赖注入的几种实现类型
在介绍如何利用控制反转模式实现彻底解耦之前先看看依赖注入的类型:
依赖注入的形式主要有三种,它们分别叫做接口注入(Interface Injection)、设值方法注入(Setter Injection)和构造子注入(Constructor Injection)。这几种类型都能有效控制代码的耦合度,并且有一定的适应范围。
接口注入
接口注入就是使用接口如Serviceable Configurable等来声明对象间的依赖关系。这类IoC容器侵入性最强,需要通过上下文来获取组件。组件需要实现容器提供的特定接口,这样,组件的重用就被限定在该容器内。因此这种思想比新的I0C解决方案更具侵入性。
设值注入
设值注入方法通过使用seters来设置依赖组件。把依赖的组件作为一个属性,通过seters方法来动态设置依赖组件。设值注入是Spring框架比较适合的注入方式。
构造子注入
构造子注入就是通过构造函数完成依赖关系的设定,在构造子注入类型的依赖注入机制中,依赖关系是通过类构造函数建立,容器通过调用类的构造方法,将其所需的依赖关系注入其中。
接口注入模式因为历史较为悠久,在很多容器中都已经得到应用。但由于其在灵活性、易用性上不如其它两种注入模式,因而在IoC的专题世界内并不被看好。设值和构造子注入型的依赖注入实现则是目前主流的loC实现模式。这两种实现方式各有特点,也各具优势。
设值注入的优势:
(1)对于习惯了传统JavaBean开发的程序员而言,通过setter方法设定依赖关系显得更加直观,更加自然。
(2)如果依赖关系(或继承关系)较为复杂,那么构造子模式的构造函数也会相当庞大(我们需要在构造函数中设定所有依赖关系),此时设值注入模式往往更为简洁。
(3)对于某些第三方类库而言,可能要求我们的组件必须提供一个默认的构造函数(如Struts中的Action),此时构造子类型的依赖注入机制就体现出其局限性,难以完成期望的功能。
-22-
北方民族大学硕士学位论文 开源技术Struts,Spring,Hibernate在MIS开发中的应用研究
构造子注入的优势:
(1) 在构造期即创建一个完整、合法的对象,对于这条Java设计原则,构造子注入无疑是最好的响应者。
(2) 避免了繁琐的seter方法的编写,所有依赖关系均在构造函数中设定,依赖关系集中呈现,更加易读。
(3)由于没有seter方法,依赖关系在构造时由容器一次性设定,无需担心上层代码在调用过程中执行seter方法对组件依赖关系产生破坏,特别是对于Singleton模式的组件而言,这可能对整个系统产生重大的影响。可见,构造子注入和设值注入模式各有千秋,而Spring对构造子注入和设值注入类型的依赖注入机制提供了良好支持。这也就为开发人员提供了更多的选择余地。理论上,以构造子注入类型为主,辅之以设值注入类型机制作为补充,可以达到最好的依赖注入效果。这个也是本整合框架应用的方式。
3.2.2 面向切面编程(AOP)
通常,系统由很多组件组成,每个组件负责一部分功能,然而,这些组件也经常带有一些除了核心功能之外的附带功能 。系统服务如日志、事务管理和安全经常融入到一些其他功能模块中。这些系统服务通常叫做交叉业务,这是因为它们总是分布在系统的很多组件中。通过将这些业务分布在多个组件中,给我们的代码引入了双重复杂性。
(1) 实现系统级业务的代码在多个组件中复制。这意味着如果你要改变这些业务逻辑,你就必须到各个模块去修改。就算把这些业务抽象成一 …… 此处隐藏:4089字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [综合文档]应答器设备技术规范(征求意见稿)A1
- [综合文档]教师 2012年高考政治试题按考点分类汇
- [综合文档]保险公司的总经理助理竞职演说
- [综合文档]卫生应急大练兵大比武活动考试--题库(
- [综合文档]徐州经济技术开发区总体规划环境影响报
- [综合文档]汉语拼音表(带声调)
- [综合文档]二年级 上 思维训练( 1~18)
- [综合文档]特色学校五年发展规划
- [综合文档]机床经常出现报警“X1轴定位监控”
- [综合文档]《电子技术基础》21.§5—2、3、4 习题
- [综合文档]浙江省深化普通高中课程改革
- [综合文档]CRISP原理 - 图文
- [综合文档]2017年电大社会调查研究与方法形考答案
- [综合文档]浅析建筑施工安全毕业论文
- [综合文档]《回忆我的母亲》名师教案
- [综合文档]装饰装修工程监理规划
- [综合文档]三下乡心得体会-文艺
- [综合文档]柱计算长度系数 - 图文
- [综合文档]全流程思考,提高燃电系统热电转换率--
- [综合文档]2018年嘉定区中考物理一模含答案
- 433M车库门滚动码遥控器
- 8、架空线路施工规范
- 大学四年声乐学习的体会
- 新北师大版五年级数学上册《轴对称再认
- 部编版五年级上册语文第六单元小结复习
- 小学六年级英语形容词用法
- 第2课 抗美援朝保家卫国 课件01(岳麓版
- 2015年天津大学运筹学基础考研真题,考
- 微机计算机控制技术课后于海生(第2版)
- 安全教育实践活动
- Delphi程序设计教程_第1章_Delphi概述
- 第八讲 工业革命与启蒙运动
- 《中华人民共和国药典》2005年版二部勘
- 科粤版九年级化学2.3构成物质的微粒(1)
- 西师大版数学三年级下册《长方形、正方
- ch6_冒泡排序演示
- 第4章 冲裁模具设计
- 浙江中小民营企业员工流失论文[终稿]
- 再议有线数字电视市场营运模式
- 昆明供水工程监理大纲




