基于Spring框架的应用设计

时间:2022-08-11 08:35:24

基于Spring框架的应用设计

摘要: 本文介绍了SPRING框架设计,在表现层使用了Struts技术,通过配置将Struts技术与Spring框架集成;在商务逻辑层利用了Spring框架,定义了基于AOP事务管理,增强了系统的稳定性;在数据层定义了DAO的基类,并将其配置到Spring中,为系统提供统一的错误层次。

Abstract: This thesis introduced Spring framework. Present tier uses Struts technique which is integrated into Spring through the configuration. Define the transaction management based on AOP technique in business tier in order to enhance the stability and flexibility of system. Define the base DAO class and configure in Spring framework in data tier to provide the standard exception types.

关键词: 软件架构;可维护性;事务管理

Key words: software architecture;maintainability;transaction management

中图分类号:TP392文献标识码:A文章编号:1006-4311(2010)16-0158-02

0引言

为了高效的完成业务功能需要系统具有良好的稳定性、可维护性和易于扩展的特点。以Spring为核心,以Struts为前端web表示层开发,以Hibernate为O/R映射的工具,建立了松散耦合软件架构,使系统的灵活性大大的提高。

1系统的架构设计

1.1 系统的架构分层MVC是一种经典的软件架构,其生成结构严谨的子系统化应用程序的有效性已得到证实[1]。本系统架构按照MVC的设计模式分为三层分别是表示层(Presentation)、商务层(Business)、数据层(Data)[2]。

表示层使用Struts应用框架作为实现框架,并将Spring的Web Application配置到Struts中。Struts最早是作为Apache Jakarta项目的组成部分问世运作。项目的创立者希望通过对该项目的研究,改进和提高Java Serve Pages (JSP) ,Servlet,标签库以及面相对象的技术水准[3]。

商务层和数据层使用Spring框架和Hibernate。处理了BO和DAO的依赖,处理了接口和实现类的依赖,事务处理,在DAO层对Hibernate API的包装,在DAO层的异常包装转换。Hibernate完成ORM功能。

基于Spring的表示层、商务层、数据层分层设计即使实现三层的松散耦合,又提供了集中配置的功能,使系统的各层功能明确,使系统的可维护性大大提高。

1.2 层间的调用的规约禁止表示层,商务逻辑层,数据访问层的跨层调用。数据信息的跨层传递可以使用DTO,如果PO信息量满足要求也可以把PO直接当作DTO使用,DTO类型不限可以使Java Bean,Map。DAO,BO必须声明接口,并且在编码中只允许使用接口类型,不允许出现实现类,增强系统可维护性,减少耦合性。

2数据访问层

2.1 设计的目的和方法主要目的是能够清晰地划分出应用层次而不管使用何种数据访问和事务管理技术;使应用对象之间的耦合松散。业务对象不再依赖于数据访问和事务策略;不再有硬编码的lookup;不再有难于替换的singletons;不再有自定义的服务注册。从而增强了系统可维护性。设计的方法是采用Spring和Hibernate相结合的方法。

基于O/R(Oriented/Relation)映射数据存取技术的Hibernate,在大型项目中被广泛地使用,它将应用系统逻辑和数据存储逻辑分开,而且它将所有数据存储逻辑都封装在持久层的类中,对应用系统开发者隐藏了数据存储的实现细节。应用系统开发者只要通过持久层提供的接口,以自己熟知的处理方法,向对象发送数据存储或数据装载信息,就可以完成对象持久化的工作。暂态对象和持久对象之间的区别也被隐藏起来,应用系统开发者使用同样的处理方式来对待暂态对象和持久对象。所以选择Hibernate作为底层数据持久化工具。

在Spring框架中可以集成了Hibernate,同时提供了的Hibernate的DAO的抽象类,将异常封装成一致的异常层次。Spring引进了DAO异常体系,主要目的是为了够清晰地划分出应用层次而不管使用何种数据访问和事务技术。

2.2 配置与定义在系统的数据访问层的设计中,为了提供统一的异常处理方式和统一的事务处理方式。在配置文件中定义Hibernate的Session Factory这样可以为所有的Spring中定义的Bean调用。根据IoC的原则,采用声明式的方式配置定义的Base DAO。Base DAO是Spring不可装载的基类,其主要的功能是负责其他的DAO提供Session Factory。这样可以为Hibernate Sessio Factroy提供统一的维护,增强系统的可维护性。用户自定义的DAO类要继承于Hibernate Dao Support类或其子类。并要定义用户自定义DAO的接口,在接口的定义中展现用户自定义类的方法,这样才能由Spring利用java反射机制生成其相应的DAO类的实体。这样所有的DAO子类就可以选择直接通过Hibernate Template来初始化,并将特定的异常转换为unchecked异常体系。

3业务层

业务层是整个系统的核心,其中包含着核心的商业逻辑,需要完善的日志操作日志,全面的事务管理。在本节将介绍在spring框架下配置BO和进行事务管理的配置。

3.1 Spring事务管理的概念Spring提供了一致的事物管理抽象。这个抽象是Spring最重要的抽象之一,它有如下的优点:

①为不同的事务API提供一致的编程模型,如JDBC、Hibernate、iBatis数据库层和JDO。提供比大多数事务API更简单的,易于使用的编程式事物管理API。②整合Spring数据访问抽象。③支持Spring声明式事物管理。

事物管理抽象为Plateform Transaction Manager,它的实现和定义同其他Spring容器中的对象一样都是由容器管理的。这个好处是即使使用JTA,也是有很有价值的抽象:事务代码可以比直接使用JTA更加容易测试。在Spring中,Transaction Exception是unchecked的。底层的事务失败几乎是致命的,很少有情况可以从他们中恢复,开发者依然可以扑获并处理Transaction Exception。Transaction Definition接口用来定义事务的,可以设定如下内容:

事务隔离程度:当前的事务和其他事物的隔离的程度。

事务传播程度:通常在一个事务中执行的所有代码都会在这个事务中运行。但是,如果一个事务上下文已经存在,有几个选项可以指定一个事务性方法执行行为。例如,简单的在现有的事务中运行,或者挂起现有的事务,创建一个新事务。

事务超时程度:事务在超时前能够运行多久。

只读状态:只读事务不需要修改任何数据。在只读的某些情况下是一种非常有用的优化。

Transaction Status接口为处理事物的代码提供一个简单的控制事务执行和查询状态的方法。通过get Transaction Status方法可以获得Transaction Status对象,他可能代表一个新的或已经存在的事务。如同J2EE事务上下文一样,Transaction Status也是和执行的线程相关联的,用来反映事务的状态。

3.2 基于AOP的事务管理的实现根据分析,决定使用Spring框架结合Hibernate实现事务管理的业务。Spirng和Hibernate本身不具备事务的管理的功能。Spring对Hibernate进行了封装,Hibernate 是JDBC 的轻量级封装。在事务管理过程中,Spring将事务委托给Hibernate,后者又将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能。Hibernate的默认事务处理机制基于JDBC Transaction。JDBC的事务处理功能简单、易用。JTA的功能强大其管理的事务可以跨越connection,但其资源消耗较大。所以决定采用Hibernate的事物管理的默认实现。

通过以上的配置将Spring框架的事务管理功能映射到Hibernate的默认事务管理功能。并且自定义了异常类型Tmj Business Exception,当该异常被抛时,事务将进行回滚操作。

3.3 BO的基类的定义BO负责业务逻辑的对象,不及数据持久化的调用允许在BO抛出异常。BO内有一个或多个DAO Interface的成员变量,DAO初始化是通过Spring框架在xml文件配置的。A_BO调用B_BO必须把B_BO作为A_BO的属性,同时配置到Spring的配置文件中事务处理是控制在BO层,事务模型属于声明型事务。

采用AOP的编程的方法的,当在BO中的方法中抛出Business Exception时,事务自动回滚。在Trace Interceptor类中引用Tmj Logger类将用户的操作的行为记录如日记文件。在BO中利用面向方面的编程方法使事务管理和日志的记录一致的,增强了系统的稳定性,提高了系统的维护性。

4表示层的设计

表示层是同用户交互的界面,负责将数据表示。表示使用广泛使用的Struts应用框架架构。

Struts应用框架通过“Plug-in”元素同Spring框架结合起来。

Base Action的定义:Base Action对Action进行封装,减少了系统的冗余性。 Base Action主要提供如下的功能:get Bean()的将在Application Context中声明的bean引入到Web Application中,便于在表现层引用。

check Login()判断用户是否已经登录。

log AccessInfo()将用户的信息、访问时间和访问的页面ID等信息写入日志文件中。

5总结

在实现过程中,根据Spring提供的AOP的功能,配置完善的事务管理程序为系统提供了统一的透明的事务管理方法;使异常更容易的被分类处理,并记入日志,便于系统管理员分析错误;使系统的稳定性大大提高。

参考文献:

[1]Richard Jensen. Mapping Classes to Relational Tables. Java Pro, 2004, (4):11-12.

[2]孙卫琴.基于MVC的Java Web设计与开发.电子工业出版社,2004.

[3]萨师煊,王珊.数据库系统概论.高等教育出版社,2004.

上一篇:某减速器装配线平衡的精益改造研究 下一篇:基于Teradata数据仓库的零售业商务智能模型