前言:一篇好文章的诞生,需要你不断地搜集资料、整理思路,本站小编为你收集了丰富的spring框架主题范文,仅供参考,欢迎阅读并收藏。
关键词 Struts2框架;spring框架;Hibernate框架
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2013)20-0049-01
1 Struts2、Spring和Hibernate三大框架简介
框架是JavaEE开发领域炙手可热的一个名词。目前技术领域存在很多种框架技术,能够有效的解决JavaEE应用开发中很多通用的问题,其中Struts2、Hibernate以及Spring是目前最主流的、使用最广泛的开源框架,每个框架专注于解决不同的问题,具有很强的代表性。其中,Struts2框架是一个MVC框架;Hibernate框架是一个ORM框架;而Spring框架是一个综合性的框架,是一个轻量级的解决方案。这三个框架往往各司其职,在应用中的不同层面发挥其作用。
2 Struts2框架工作原理
Struts2框架已经盛行多年,然而Struts2与Struts1之间并不是扩展和升级的关系。Struts2是著名框架WebWork的扩展,WebWork是一个很优秀的MVC框架,但是由于是一个新兴的框架,在一段时间内没有被广泛使用。后来,Struts和WebWork社区决定将二者合并,于是推出了Struts2框架。Struts2框架兼具Struts1和WebWork的优点,从而得到了广泛的使用。
Struts2的工作原理比较复杂:
1)客户端向服务器端提交请求,容器初始化HttpServletRequest请求对象。
2)请求对象被一系列的Servlet过滤器过滤。Struts2中的过滤器有3种:①ActionContextCleanUp过滤器,是一个可选的过滤器,主要用来集成其他框架;②其他插件的核心过滤器,譬如:SiteMesh插件的过滤器;③FilterDispatcher过滤器,是Struts2 API中提供的过滤器,是必选的过滤器。
3)FilterDispatcher过滤器调用ActionMapper,决定该请求是否需要调用某个Action。
4)如果请求需要调用某个Action,ActionMapper将通知FilterDispatcher过滤器把请求的处理交给ActionProxy来处理。
5)ActionProxy通过Configuration Manager解析框架的配置文件struts.xml,找到需要调用的Action类。
6)ActionProxy将创建一个ActionInvocation实例。
7)ActionInvocation实例使用命令模式回调Action中的execute方法,Action调用业务逻辑类完成业务逻辑。在调用Action的前后,将调用该Action涉及的相关拦截器。
8)Action执行完毕后,ActionInvocation根据struts.xml中的配置找到对应的返回结果,返回给JSP、FreeMarker等模版文件。
3 Hibernate框架的作用及其对象状态
Hibernate是一个ORM(Object-Relational Mapping)框架,主要作用是简化应用的数据持久层编程,不需要编程人员花大量的时间编写SQL和JDBC代码。可见,Hibernate框架位于应用层和数据库之间,解决数据持久层编程。Hibernate框架主要包括持久化对象(persistent Object):是Hibernate框架中非常重要的组成部分,简称为PO。PO用来映射数据库中的记录,可以通过修改PO来修改数据库记录;包括Hibernate属性文件(hibernate.properties):使用Hibernate进行数据持久层编程,相关的数据库访问信息需要在Hibernate属性文件中配置,譬如,数据库驱动类、连接串、用户名、密码等,也可以使用名字为hibernate.cfg.xml的xml文件配置属性;还包括Hibernate映射文件(XML Mapping):持久化对象映射数据库中的记录,其映射关系依靠Hibernate框架的映射文件配置,映射文件是XML文件,往往使用*.hbm.xml形式命名,其中*是持久化对象的类名。
Hibernate框架是一个完整的ORM框架,以对象为基础,通过操作对象,进一步操作对象关联的数据库记录。持久化类与数据表对应,持久化的对象则映射数据库记录。持久化的对象有三种状态:瞬时状态,当通过new操作符实例化了一个对象,而这个对象并没有被Session对象操作,也就是该对象没有与一个Session对象关联时,那么这个对象就称为瞬时状态对象,瞬时状态的对象与普通对象没有区别,没有与数据库的记录有映射关系;持久状态,如果一个对象与某一个Session对象关联,例如被Session对象刚加载的、刚保存的、刚更新的,那么该对象就称为持久状态对象。持久状态的对象与数据库中一条数据相对应,并拥有持久化标识。当持久状态的对象有改变时,当事务提交后,Hibernate会自动检测到对象的变化,并持久化到数据库中;脱管状态,当与持久状态对象关联的Session关闭后,该对象就变成脱管状态。脱管状态的对象引用依然有效,可以继续使用,当脱管状态的对象再一次与某个Session关联后,脱管状态对象将转变为持久状态,脱管期间进行的修改将被持久化到数据库中。
4 Spring框架的模块
企业级应用开发总是涉及方方面面,Spring框架是一个轻量级的解决方案,致力于创建“快装式企业应用”。Spring框架包括一系列的特性,被组织在七个模块中,可以把Spring框架看成一个标准的开发组件。Spring框架被设计成无侵入式的方式,即企业应用可以根据需要选择Spring框架中必要的组件,而忽略其他部分,以做到最小范围依赖的Spring框架。
Spring框架包含了7个模块,每个模块对于解决不同的问题。Spring Core模块:是最核心的模块,封装了Spring框架核心包,主要提供了Spring IoC(控制反转)容器。IoC是Spring框架的基础,所有其他特性都是基于IoC之上;Spring Context模块:提供了对Spring中对象的框架式访问方式,并包括国际化、事件传播等特性;Spring DAO模块:提供了JDBC的抽象层,是集成JDBC的封装包,能够避免JDBC繁琐冗长代码,同时还提供了声明性事务管理特性;Spring ORM模块:提供了集成常用ORM框架的封装包,包括JDO、JPA、Hibernate、iBatis等。使用该模块可以更为便捷的使用ORM框架,而且还可以同时使用Spring的其他特性,如声明性事务等;Spring Web模块:提供了Web开发的一些基础特性,如上传文件等,同时提供了与Web框架集成的封装包,如集成Struts2框架;Spring AOP模块:AOP(面向切面编程)是Spring中除了IoC外的另外一个核心概念,该模块提供了符合AOP联盟规范的AOP实现,可以降低应用的耦合性,提高扩展性;Spring MVC模块:该模块提供了一个MVC框架。Spring框架包含了一系列的特性,可以根据应用的具体需要来选择使用部分组件。Spring框架可以在任何类型的应用中使用,譬如:桌面应用、Web应用、C/S应用等。
参考文献
[1]柯常钦,史毓达.基于SSH框架的Web应用系统开发研究[J].湖北第二师范学院学报,2010(08):102-105.
[2]符钰.基于Struts2+Hibernate3+Spring3框架的Web[J].金华职业技术学院学报,2013(06):61-64.
著名的软件大师RalphJohnson对框架(Framework)进行了如下的定义:框架是整个系统或系统的一部分的可重用设计,由一组抽象的类及其实例间的相互作用方式组成,框架一般具有即插即用的可重用性、成熟的稳定性以及良好的团队协作性。JavaEE复杂的多层结构决定了大型的JavaEE项目需要运用框架和设计模式来控制软件质量。Struts、JPA和Spring是JavaEE开发的3种轻量级开源项目,它们的出现为开发人员提供了极大的便利,将开发人员从简单而繁琐的工作中解脱出来,从而去关注业务逻辑模块的实现,从而降低了开发周期。同时,也为系统的性能和安全性提供了保证,提高了系统的扩展性和可维护性。
1.1Struts
Struts作为Apache组织的子项目,是一个基于MVC(模型—视图—控制器)设计模式的开源框架,其摆脱了传统Web应用开发模式的束缚,得到了众多软件企业和开发人员的认可,成为MVC模式Web应用的首选框架。Struts的模型(Model)分为Action和ActionForm两个对象,由ActionForm封装交互的数据元素,Action完成业务处理。视图(View)由JSP以及Struts标签库等组成,视图负责前端的页面及数据显示。控制器(Control-ler)用于管理模型与视图的交互,控制组件有struts-con-fig.xml和ActionServlet,控制器主要处理发送到Struts的HTTP请求,把请求分发到相应的Action类,然后通过ActionForward进行链接转向。
1.2Spring
Spring是一个以控制反转(IOC)和面向切面(AOP)编程为核心的轻量级分层体系结构开发框架。通过控制反转机制,只需描述哪一个组建需要哪一项服务,而无需在代码中直接与对象或服务连接,通过IOC容器自动地将其注入。同时运用面向切面编程可以创建“横切关注点”,可将它们插入到代码中,使代码具有良好的可重用性可扩展性。此外,Spring还提供了包括声明式事务管理,RMI或WebServices远程访问业务逻辑,以及可以多种方法进行的持久化数据库的解决方案。
1.3JPA
JPA(JavaPersistenceAPI)由EJB3.0软件专家组开发,是JavaEE标准中的ORM规范,它充分吸收了现有Hibernate、TopLink等ORM框架的基础上发展而来。JPA是一个简单易用、伸缩性强的ORM规范。任何符合JPA标准的框架都提供相同的访问API,这确保了利用JPA技术开发的企业级应用可以在任何实现了JPA规范的ORM框架中运行,可移植性很强。目前主流的ORM框架如Hibernate也提供了对JPA的实现。
2系统设计
2.1系统功能模块设计
电子商务系统是一套面向企业级的商品在线交易平台,从用户的角度看系统可分为前台和后台两大模块,前台主要负责用户的产品浏览,在线交易,产品评价等商务活动。后台模块又可根据超级管理员、普通管理员、部门员工等不同权限对网站的运营实施管理功能。从功能结构上看,系统可包含多个功能子模块,具体如下:产品管理:网站运营人员可通过该模块对产品的详细信息进行管理。产品具有产品类别、品牌、价格、销量、点击数、厂商、是否推荐标识等属性,产品类别具有向下无限级分类功能。产品搜索:根据用户输入的关键词对产品信息进行搜索,并可通过产品类别、品牌、价格等属性进行筛选。产品展示:前台展示页面提品类别和品牌的导航,通过导航可以定位到相应类别和品牌下的产品列表;产品页面显示产品的详细信息,并可根据产品价格,产品销量等属性对产品进行排序。购物车:购物车是在线交易系统的重要组成部分,类似于现实世界超市中的购物篮。用户可以将喜爱的产品添加进购物车,而后建立订单结算,支付方式可通过在线支付(支付宝等)和邮局汇款方式。购物车提品添加、产品删除、产品数量修改、产品清空、产品总价格计算等功能。订单管理:订单管理模块的主要功能包括订单查询、订单修改、订单删除、订单处理等。订单处理流程由多个部门协同参与,市场部负责订单确认,财务部负责订单支付确认,产品部负责产品的配送。订单根据处理流程应具有多个处理状态:未处理、已确认、已支付、已配送等。为避免同一订单同时被多人进行处理造成的订单异常,订单在被处理时其状态设为锁定,只允许单人访问,处理完毕后恢复解锁。用户管理:网站的用户群体可分为前台客户和网站运营人员,故用户管理功能可分为对前台客户信息的管理和网站运营人员的管理。对前台客户可管理其注册信息、购买行为、评论回复等;对网站运营人员可管理其员工信息和部门信息等。其中,网站运营人员隶属于不同的部门之下,每个部门行使不同的责任和权限。权限管理:权限管理针对网站的运营人员设定,超级管理员拥有所有权限,可创建并维护下属的部门信息,为部门添加员工并分配部门相应的操作权限。数据统计:对产品的销量、点击数、访问来源、个性化用户购买行为、浏览习惯等数据进行统计,为网站商业运营提供决策支持。
2.2分层架构设计
基础平台采用JavaEE的三层结构,分为表现层、业务逻辑层和数据服务层(系统架构如图1所示)。其中表现层主要包括Jsp、Struts标签和JSTL/EL来完成页面显示和数据的呈现。数据服务层由MySQL提供数据存储服务。中间层通过整合主流的开源框架Struts+Spring+JPA实现,具体又可细分为:①Web层,负责表现层与业务逻辑层的交互,通过调用业务层对象处理业务,并进行链接转向,呈现数据到表现层;②Service层,负责业务逻辑的实现,通过DAO接口的实例对象进行持久化操作;③DAO层,负责与持久化对象进行交互,封装了基本的数据访问方法,如增、删、改、查等;④PO层,负责对象到关系数据库的映射。整合框架的过程中,通过基于MVC模式的Struts框架,利用ActionForm类封装与用户交互的数据元素,Ac-tion类实现控制、调用业务对象处理业务。通过Spring容器进行业务组件的组装关联,通过依赖注入、AOP应用、面向接口编程,来降低组件之间的耦合度,提高系统的扩展性和通用性。把ActionObject交由Spring容器进行管理,在Action中可通过依赖注入功能为Action对象注入业务对象;使用Spring容器提供的事务管理功能对业务层对象声明事务管理。通过JPAAPI对实体bean进行持久化操作。
3系统实现
3.1泛型机制
泛型是JavaSE1.5的新特性,在没有引入泛型的情况下,往往通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,导致常常出现运行时的转型异常。本系统通过引入泛型机制实现参数化类型,所操作的数据类型被指定为一个参数,该参数类型可以用在类、接口和方法的创建中,并且所有的强制转换都是自动和隐式的。从而提高代码的重用率和可读性。
3.2产品分类实现
下面以产品分类为例详细说明在架构中该模块的具体实现。产品分类应具类别添加、修改、查询、删除、向下无限极分类、分页查看等功能,由于产品类别之间、类别和具体产品之间有诸多层次性关系,为避免由于删除产品类别导致的其他数据异常,故删除功能并不对产品类别的数据进行物理删除,而是通过一个是否可见标识设定其可见或隐藏。产品分类具有如下属性:分类ID、类别名称、是否可见标识、所属上级分类、子类别等。
3.2.1持久层实现
持久层主要包括持久化类和元注解。通过JPA提供注解方式配置实体的JPA行为,属性映射可以在持久化类的属性getter方法上进行标记。JPA与数据库的连接通过persistence.xml文件进行配置,包括连接数据库所用的连接池、用户名和密码等信息。部分产品类别的实体Bean代码如下:@Entity//指定为JPA实体publicclassProductTypeimplementsSerializable{privateIntegertypeid;//产品类别idprivateProductTypeparent;//所属父类privateSet<ProductType>childtypes=newHashSet<ProductType>();//子类别…@Id@GeneratedValue(strategy=GenerationType.AUTO)//注解持久化类的主键信息和主键的生成策略publicIntegergetTypeid(){returntypeid;}publicvoidsetTypeid(Integertypeid){this.typeid=typeid;}@ManyToOne(cascade=CascadeType.REFRESH)@JoinColumn(name="parentid")//定义外键对应关系和级联publicProductTypegetParent(){returnparent;}publicvoidsetParent(ProductTypeparent){this.parent=parent;}…}
3.2.2业务层实现
(1)DAO层的实现
DAO层包括一个接口DAO及其DaoSupport实现类,通过引入泛型机制实现参数化类型,可对所有实体进行操作。DAO层作为业务逻辑层Service的上层父类,完成和持久层进行交互的,不同的业务逻辑类可根据不同需求对DaoSupport方法进行重载。DaoSupport类部分代码片断如下:@Transactional//声明事务管理publicabstractclassDaoSupport<T>implementsDAO<T>{@PersistenceContextprotectedEntityManagerem;//声明实体管理器publicvoiddelete(Serializable...entityids){for(Objectid:entityids){em.remove(em.getRef-erence(this.entityClass,id));}}@Transactional(readOnly=true)//声明事务只读属性publicTfind(SerializableentityId){returnem.find(this.entityClass,entityId);}}
(2)Service层实现
业务对象负责处理程序的业务逻辑,包括一个接口及其实现类,需要继承DaoSupport实现类并将具体的实体作为泛型参数传入。不同实体的业务类可根据需求重载或增加新的的方法。代码片断如下:@Service@Transactional//声明该类为业务类和声明事务管理publicclassProductTypeServiceBeanextendsDao-Support<ProductType>implementsProductTypeService{@Override//重载实体的删除方法publicvoiddelete(Serializable...entityids){更改可见标识代码;}…}
(3)业务层的配置
下面就是通过Spring的配置文件将定义好的DAO和Service组装关联起来。配置文件bean.xml文件代码片断如下:<beanid="entityManagerFactory"class="org.springframework.orm.jpa.LocalEntityManagerFactory-Bean"><propertyname="persistenceUnitName"value="shopping"/></bean><beanid="transactionManager"class="org.spri-ngframework.orm.jpa.JpaTransactionManager"><propertyname="entityManagerFactory"ref="entityManagerFactory"/></bean><tx:annotation-driventransaction-manager="trans-actionManager"/><beanid="compass"class="pass.spring.LocalCompassBean"><propertyname="classMappings"><list><value>com.bean.product.ProductInfo</value>…</list></property><propertyname="transactionManager"ref="transactionManager"/></bean>
3.3分页实现
在编写JavaWeb应用时,常常需要对显示的数据进行分页显示,如果一次性将所有结果数据显示给用户,则显得不够人性化和美观。该系统对分页功能进行封装,并引入泛型机制,调用时通过include指令包含一个用于显示分页数据的独立jsp页面即可完成对所有实体的分页功能。具体做法是:利用泛型定义一个查询结果类QueryResult用于存放查询得到的分页数据,该类包含两个属性List<T>型的结果记录集resultlist和long型的查询结果的总记录数totalrecord以及它们的getter和setter方法;同样利用泛型定义一个用于在页面显示的页对象PageView,其包括总记录数、总页数、每页显示记录数、当前页、记录的开始索引、起始页码、结束页码、分页数据等,其中分页数据为List<T>型,通过set方法将QueryResult的分页数据注入,另外总记录数,总页数和记录的开始索引也需要通过简单的公式计算出来,通过set方法注入,在此不一一列举。用于显示分页数据的独立jsp页面fenye.jsp部分调用如下:<c:forEachitems="${pageView.startindex}"end="${pageView.endindex}"var="p">第${p}页</c:forEach><c:forEachitems="${pageView.records}"var="entry">${entry.propertyValue}</c:forEach>
关键词:Spring;非侵入式;松耦合;高可配;面向切面
【分类号】TP393.07
1 引言
EJB的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是在实践中并没有获得绝对的成功,因为开发效率,开发难度和实际的性能都令人失望。为了解决企业级应用开发的复杂性,Spring技术诞生了。Spring是一个开源框架,是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。Spring使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。
2 Spring技术及特点
2.1 Spring框架
核心Spring容器
容器是Spring框架最核心的部分,它负责Spring应用中的Bean的创建、配置和管理。所有的Spring模块都构建于核心容器之上。
Spring的AOP模块
在AOP模块中,Spring对面向切面编程提供了丰富的支持。这个模块是Spring应用系统开发切面的基础。与依赖注入一样,AOP可以帮助应用对象解耦。借助于AOP,可以将遍布应用的关注点从它们所应用的对象中解耦出来。
数据访问与集成
Spring的ORM模块建立在对DAO的支持之上,并为某些ORM框架提供了一种构建DAO的简便方式。Spring对许多流行的ORM框架进行了集成,包括Hibernate、JDO等。
WEB和远程调用
MVC模式已经被普遍的接受为一种构建Web应用的方法,它有助于将用户界面逻辑与应用逻辑分离。Spring集成了多种流行的MVC框架,并且自带了一个强大的MVC框架,提升了Web层技术的松耦合性。
2.2 Spring的主要技术特点
轻量--从大小与开销两方面而言Spring都是轻量的。Spring应用中的对象不依赖于Spring的特定类。
面向切面--Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开放。
容器--Spring包含并管理应用对象的配置和生命周期,可以配置每个Bean如何被创建以及它们是如何相互关联的。Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大的并难以使用。
框架--Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。
3 Spring在网络管理中的应用
3.1 Spring与网络管理结合的优势
如果将Spring技术应用到网络管理领域,则可以使网络管理系统同样具有Spring的诸多优势。同时,还可以利用已经实现的Spring通用服务和集成框架,使网络管理系统更能适应未来发展的需要。更为重要的是,可以在最大程度上减少网络一致化过程所需要完成的工作。
利用Spring技术,能方便地实现各个网络管理功能模块之间的相互调用以及信息传递,这样就可以通过增加新的服务模块来实现新的功能,而不必对整个系统进行重新编写和重载,便于网络管理系统功能的扩充。
3.2 传统网络管理系统存在的问题
传统的网络管理系统管理构架曾经取得了巨大的成功,极大地推动了网络的发展。但是,随着新一代网络的快速进步,它的一些缺点也慢慢显现出来,甚至制约了网络管理的进一步发展。主要问题有:
现在的网络终端千差万别,对于每种不同的设备、不同的软件平台都要开发出不同的应用程序,代码的可移植性差、工程量大。
系统的可扩展性差。由于历史原因所致,该架构对于很多异构的子系统难以合成一个综合的管理系统,其本身也面临着可扩展性问题。
3.3 Spring的解决方案
本文在分析传统网管系统的问题的基础上,研究了Spring在BS环境中基于Spring技术的解决方案,并提出了一个简单的网络管理框架,如图2所示。
Web容器启动后,创建两个Spring容器:Spring根容器和Web容器。根容器负责业务处理,整个应用系统的核心处理单元,Web容器主要负责接收用户请求,并将解析后的参数等转交根容器进行处理,然后将处理结果通过HTTP响应返回给前台。
SpringWeb容器寄生于Spring根容器中,是根容器的子容器,可以访问根容器中所有的资源和服务。单Spring根容器作为单独的业务处理单元,不能定位SpringWeb容器的服务,这就将应用逻辑和视图显示处理隔离开来,降低了不同模块之间的耦合性,并使得应用系统更加容易扩展。
使用Spring技术与网管结合,使得网络管理中拓扑管理、故障管理、性能管理、配置管理等模块之间联系更加松耦合,模块彼此独立,更加容易复用和扩展。
4 结束语
Spring是分层的架构,开发者可以选择自己需要的层而不必关注不必要的部分。Spring使得对象管理集中化和简单化。Spring致力于简化企业级Java开发,促进代码松耦合。Spring成功的关键在于依赖注入和AOP。随着网络管理系统的发展,Spring必将在未来的综合网络管理系统中发挥越来越大的作用。
参考文献
关键词:SSH 框架技术 事务处理
中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2012)10-0126-02
1、基于SSH框架技术开发WEB项目的思路
SSH是Struts Spring Hibernate三个框架技术单词的缩写。根据SSH框架技术整合后各负其职,各尽其责及软件代码复用的原则,应采用三层结构形式体现WEB项目开发流程,这三层依次为:表示层(Web层)、业务服务层(Biz层)、DAO层(数据访问层),这三层之间均采用接口方式进行声明及调用。分层开发结构图如图1所示。
之所以采用SSH框架整合技术设计并实现Java WEB应用系统,主要是因为这种整合后的框架技术可以实现具有结构清晰、复用性好、维护方便、高稳定性和高效率开发的Web应用程序。
其中,表示层(Web层):主要接受用户请求,以及数据的返回,为客户端提供用户界面以便进行交互。
业务服务层(Biz层):此层主要是表示层和数据访问层之间沟通的桥梁,通过对数据访问层的操作,并根据业务规则的制定、业务流程的实现来负责数据的传递和处理。
DAO层(数据访问层):有时候也称为持久层,其功能主要是负责数据库的访问,实现了O/R映射,将面向对象的操作转变为面向关系的操作。
实体类层:用于对必须存储的信息和相关行为建模的类,主要用于三层结构中的数据传递。
在用SSH框架整合技术开发的Java WEB项目整个流程中,由Struts负责项目的显示用户界面及处理结果,Spring负责项目中各组件间的组织、管理及依赖注入过程,Hibernate负责处理数据对象的O/R映射及持久化。
2、基于SSH框架技术的某系统功能实现
SSH框架之间各组件的依赖注入关系如图2所示,依次为表示层(xxxxAction)依赖业务服务层(xxxxBiz),业务服务层(xxxxBiz)依赖数据访问层(xxxxDAO),数据访问层(xxxxDAO)依赖SessionFactory,SessionFactory依赖数据源(DataSource)。下面以开发的某系统为例(注:以下代码中连接数据库为SQL Server2008)。
2.1 Spring框架依赖注入Hibernate框架
在Spring框架的配置文件applicationContext.xml中第一步,进行数据源配置;
value="jdbc:sqlserver://127.0.0.1:1433;databaseName=访问的数据库名">
第二步,进行SessionFactory配置;
第三步,注入Dao层;
第四步,注入业务逻辑层;
2.2 Spring框架组装Struts框架
第五步,注入表示层(action) ;
在Spring框架的applicationContext.xml中加上如下所示的代码:
程序的依赖关系都使用Spring管理起来了,Spring框架在经过依赖注入后,会把Struts和Spring整合到一起。在Struts框架中的Struts-config.xml文件中加入如下所示的注入过程。
path="/fwxx" type="Spring框架提供的类">
关键词:J2EE;表现层;业务逻辑层;持久层;整合框架;Struts;Spring;Hibernate
中图分类号:TP311.52
伴随着时代的发展进步,软件系统的规模越来越大且更加复杂。面对日益复杂的软件系统,对于开发者而言,正在不断寻求一种能使Web应用系统具有更好的可维护性和可扩展性的框架结构,以便实现应用程序的高内聚、低耦合及代码的可重用性。J2EE平台的出现,使软件的复用得以很好的实现,J2EE因此成为当前市场上广泛应用的企业级应用系统开发技术。
在当前的Web系统开发中,程序开发人员对运用Struts、Spring、Hibernate框架的整合十分亲睐,这便是现在十分流行的轻量级J2EE。本文致力于研究分析如何有效整合轻量级J2EE中的Struts、Spring、Hibernate三个框架。通过对三个框架的有效整合使得系统开发时间缩短、避免开发的重复,同时系统的维护性、移植性和扩展性大大增强,系统开发成本得以降低。
1 J2EE体系结构
1.1 J2EE平台简介
J2EE是由Sun公司,目前已经成为一个具有稳定性、开放性、高安全性的开放平台。J2EE提供了EJB(Eenterprise JavaBeans)组件、JSP(Java Server Pages)、Java ServletsAPI的支持,能够为在Internet应用中保护数据提供安全模式。
J2EE使用多层的分布式应用模型来提高系统的维护性和扩展性,分离业务逻辑的实现,当系统升级时可以避免整个应用程序被重新开发。
J2EE的体系结构可分为领域对象层、数据访问对象层、业务逻辑层、控制器层、表现层,各层的组件之间松耦合在一起。应用程序安全机制得以增强,性能得以提高,并且有良好的向导支持打包、部署应用。
1.2 J2EE的优势特点
J2EE是一组规范、技术框架及技术的集合,用于创建分布式企业系统,具有跨平台可移植性、开源代码库的可用性、服务端的大容量调度基数且符合大多数W3C标准。
(1)高效的开发率。企业通过使用J2EE架构,不必过问服务端任务,可完全交由中间件供应商完成,系统开发人员重点创建商业逻辑,这样可以减少系统的开发时间,提高系统的开发效率。
(2)良好的可伸缩性。企业为了满足在系统上进行商业活动的客户,必须选择有良好的可伸缩性的服务器端。因为各种操作系统都可以部署基于J2EE架构的应用程序,且J2EE供应商提供了负载平衡策略,使得系统中的瓶颈消除了,服务器可以集成部署,因而应用系统实现了良好的伸缩性,满足了应用程序在未来商业应用中的需求。
(3)支持异构环境。应用J2EE体系结构使得在异构环境中的可移植程序可以被开发部署。基于J2EE的程序被合理的设计出后,即可只需要开发一次便部署到各种平台。J2EE也提供现成的可兼容J2EE的第三方组件给客户,为了节省制定整个方案的费用,可将J2EE部署到异构环境中。
1.3 J2EE的缺点及解决方案
J2EE体系结构提供了基于组件的多层应用体系结构,在简化了系统的开发、配置和维护的同时,也存在着一定的缺陷。在J2EE平台中,EJB是企业级开发中经常使用的一个重要组件,它提供了持久化、事务管理、分布计算、声明式事务支持等,较大程度的简化了开发过程。可是,EJB所带来的简化只是相对的,EJB存在如下缺点:
(1)EJB作为J2EE的标准业务组件,需要运行在EJB容器中,EJB与EJB容器的紧耦合使其可移植性、可测试性都很差。EJB容器提供所有企业级服务,启动慢,部署复杂,性能较差。
(2)由于J2EE需要使用EJB组件,必须要用到高端的应用服务器,这就比Servlet更加难以管理。同时,在客户端层需要服务定位器和业务代表。
(3)在EJB容器之前、会话接口之后,需要运行一些难以管理细粒度对象。为了管理这些细粒度对象,需要额外的基础架构。
(4)EJB容器中一旦放进了业务逻辑,就很难停下来。如果有一些业务对象需要完成的任务是EJB编程模型所禁止的(比如读取文件、开启网络连接、创建线程等),那就会出现问题。
大量实践证明,传统的J2EE架构常常是无法令人满意的,应用程序过于复杂,测试困难,维护成本较高。
为解决J2EE所存在的上述缺陷,本文通过应用Struts、Spring、Hibernate等轻量级、使用灵活的框架的整合来替代传统的EJB框架,这种整合后的框架为轻量级J2EE。
2 轻量级J2EE中的三个框架
相对于传统意义上的J2EE体系结构,轻量级J2EE架构在应用系统开发过程中简化了编码过程,且提供了更敏捷的响应,降低了复杂性,减少了规则。系统的开发、部署时间被缩短。
2.1 Struts框架简介
Struts用于建立基于Java的框架和web应用程序的开放源码,它是Apache Jakarta项目的组成部分。Struts拥有自己的控制器,整合了其它的一些技术去实现模型层、视图层和控制器层。在所有的MVC框架中,Struts框架被广泛使用。其具体实现如图1所示。
客户浏览器ActionServletActionStruts-config.xml模型JSP页面HTTP请求HTTP响应直接转发显示调用模型转发请求。
在上图中有两个类,一是Struts的核心控制器ActionServlet,用来获取用户的请求;二是用户提供的Action,控制器接收来自ActionServlet的请求后,根据请求调用模型的业务逻辑方法来处理这些请求,最后把结果返回到JSP页面。
2.2 Spring框架简介
Spring是面向切面(AOP)的容器框架,是一个轻量级的控制反转(IoC),它由Rod Johnson开发。
Spring处在应用的业务逻辑层,该层又是整体架构里最核心的,位于表现层和数据持久层之间,调用数据持久层中的数据返回给客户所在的表现层。
相比较于EJB,开发应用程序的一种轻量级的解决方案由Spring提供,具有多种优点,比如:支持ORM、代码少、分层清楚、速度快等。
2.3 Hibernate框架简介
Hibernate是Java应用程序的ORM(对象/关系映射)持久层框架,在JDBC的基础上进行了简单的封装以实现对象关系映射。应用程序对象由Hibernate在数据库中存储。使用Hibernate使开发者不必编写大量的代码来存储和检索对象。
由于关系型数据库和面向对象编程语言之间会出现一些不协调的问题,为解决这些问题必须设定一种规范,ORM便作为一种解决问题的规范孕育而生。ORM工具所解决的问题就是对象与数据库表格之间的数据转换。
3 Struts、Spring、Hibernate的整合
一般而言,表现层、业务逻辑层、持久层组成了应用系统的框架,每个层次分别对应一个框架,表现层对应Struts框架,业务逻辑层对应Spring框架,持久层对应Hibernate框架,各层以松耦合的方式相互作用,而彼此之间又相互独立。应用系统采用框架整合进行开发,提高了系统灵活性及可维护性,同时系统的耦合度也得以降低。
3.1 Struts与Spring整合的实现
目前针对Struts与Spring框架的整合方式有三种:
(1)利用Spring的ActionSupport类整合Struts。将Spring框架与Struts动作耦合在一起,使用这种整合方式,一旦用其它框架替换Sping框架,则代码需要重新编写。同时,因为Spring无法控制Struts动作,致使Spring AOP的优势无法体现。
(2)使Struts的RequestProcessor被Spring的DelegatingRequestProcessor覆盖。这种方式的优点是较为简便,但是如果应用系统已经扩展了RequestProcessor,DelegatingRequestProcessor就需要手动整合,如此便增加了代码量,会造成维护的困难,应用程序的灵活性也会因此而降低。
(3)Struts Action委托给Spring框架,这是一种全权委托方式,就是将Struts的创建工作全部交付给Spring来进行。使用Spring的DelegatingActionProxy来实现工作。Org.springframework.web.struts.DelegatingActionProxy继承于org.apache.struts.action.Action,Spring支持的工作由模式来完成。Struts的Action由DelegatingAetionproxy配置成,所有的请求先被Actionservlet截取,再被转发到对应的Action,Action的实现类全都是DelegtingActionproxy。DelegatingAetionproxy再将请求转发给Spring容器的bean。
3.2 Spring与Hibernate整合的实现
Spring整合Hibernate主要是对Hibernate的Session进行管理,为了方便处理典型的Hibernate的整合问题,Spring提供了很多的Ioc的特性的支持。
SessionFactory的管理由Spring通过ApplicationContext来完成,当应用程序自动加载时,SessionFactory处于ApplicationContext管理的任意一个bean引用中,因为SessionFactory是Session的工厂,所以Hibernate的数据库访问是在Session的管理下进行。SessionFactory与数据库的连接同样由Spring配置,无须使用单独Hibernate应用所必需的hibernate.cfg.xml文件。由于应用了Spring框架,使得对Hibernate的操作简化了。
4 总结
本文致力于研究分析整合Struts,Spring和Hibernate三个框架。对于众多的应用系统开发者而言,如何根据系统开发的实际情况,在实际的开发过程中,有针对性的采用这三个框架进行整合,是一个需要不断思考的问题。框架的整合并非万能的,使用整合的方式同样存在一定的缺陷,如何在实际应用中,突出框架整合的优势,避免存在的缺点,也是开发者们在将来需要重点研究的课题。使用三种框架的整合,主要是为了对应用系统的进行优化,降低应用程序开发成本,提高开发效率,获得更好的可扩展性和可维护性。
参考文献:
[1]王晓楠.MVC的设计和实现[J].计算机系统应用,2004,30(3):41-45.
[2]孙卫琴.精通Struts:基于MVC 的Java Web 设计与开发[M].北京:电子工业出版社,2004.
[3]孙卫琴.精通Hibernate:Java 对象持久化技术详解[M].北京:电子工业出版社,2005.
[4]古全友,王恩波,晋昌胜.AOP技术在J2EE系统构建中的应用[J].计算机技术与发展,2006,16(4):150-152.
[5]李刚.整合Struts+ Hibernate+ Spring应用开发详解[M].北京:清华大学出版社,2007.
[6]陈天河.Struts,Hibernate,Spring集成开发宝典[M].北京:电子工业出版社,2007.
[7]赵强.基于Struts框架的研究生管理系统[J].电脑开发与应用,2009.
【关键词]J2EE;Struts;Hibernate;Spring
中图分类号:TP39 文献标识码:A 文章编号:1006-0278(2013)05-162-01
一、引言
随着中国通信业的发展,尤其是面对通信3G时代。中国移动的电子设备和技术越来越成熟与先进。可是在对电子设备的管理方面却有着不足,从而导致了资源的过多浪费以及信息的混乱。因此对于电子设备的管理已经越来越成为通信业公司其重要组成部分,通过对电子设备的合理管理,将资源利用最大化,加强公司运行效率,将会在未来成为决定公司走向的重要因素。文章主要论述如何实现对电子运行设备的办公化管理,达到系统性、统一性、安全性。
二、系统设计
(一)总体设计
本系统采用基于B/S网络结构体系来开发系统,基于J2EE平台进行开发,前台页面使用jsp语言,并选用经典的三层架构——MVC模型框架Struts作为开发架构,在数据持久层方面则使用了Hibernate框架,并加入Spring框架对系统开发进行统一详细管理,数据库采用MYSQL。
系统主要由部门管理、机房管理、员工管理、权限管理等四模块组成。另在此之外还拥有日志管理和字典管理两个模块。每一用户登录时,首先查找自身的数据库,并查询其所拥有的权限。限制其进行非其权限操作,并通过日志记录其操作,使信息管理详细和准确。
(二)系统主要实现的功能
本系统主要是对部门、机房进行管理,通过对员工权限的控制使所属不同部门的员工对不同设备进行管理,同时通过对机房的监控,能及时的知道机房的状况。当出现问题时也能通过日志和字典迅速的查询到所负责员工。具体实现目标如下:
*实现对部门信息进行全面管理的功能。
*实现对机房信息进行全面管理的功能。
*实现对员工信息进行全面管理的功能。
*实现对员工角色的全面管理的功能。
*实现对员工在机房管理时的信息进行全面管理的功能。
*系统最大限度地实现了易安装l生、易维护性和易操作性。
*系统运行稳定、安全可靠。
三、数据库设计
本系统中采用MYSQL数据库来保持数据信息,使用Hi-bemate框架来进行数据库操作。首先设计一个名为China-mobile的数据库来保持数据,并建立如下信息表:
表dept(部门信息表):用来保存部门详细信息
表person(员工信息表):用来保存人员详细信息
表room(机房信息表):用来保存机房详细信息
表module(模块信息表):用来保存人员权限所属模块详细信息
表operate(操作信息表):用来保存人员对系统操作详细信息
表log(日志信息表):用来保存日志详细信息
表dictype(字典类型信息表):用来保存字典类型详细信息
表dic(字典信息表):用来保存字典详细信息
表role(权限信息表):用来保存权限详细信息
四、关键技术
(一)J2EE平台概述
J2EE是一种利用Java平台来简化诸多与企业解决方案的开发、部署和关系相关的复杂问题的体系结构。J2EE技术的基础是Java平台的标准版,J2EE不仅继承了标准版中的许多优点,如方便存储数据库的JDBC(Java数据库连接)技术,同时还提供了对EJB(企业JavaBean)、JMS(异步消息传输)、XML(可扩展标记语言)等技术的支持。
(二)轻量级Web框架
由于J2EE平台提供的EJB等技术所占资源多、技术难以掌握、内部复杂性大的问题,往往在做J2EE软件开发时候,会在J2EE平台的基础上加入类似于Spring这样轻量级框架来降低开发和维护的难度。其中成熟的Struts框架是前端开发领域的利器,Hibernate则是O/RMapping领域事实上的标准,尤其是它对EJB3.0的巨大贡献,而Spring则使开发者和具体的J2EE平台处于“松偶合”的状态,可以把Spring看作是各种Web框架的粘合剂。所以Struts+Spring+Hibemate一起构成了轻量级Web框架。其中Struts为表示层,Spring为业务逻辑层,Hibernate为持久化层。
(三)运用Spring托管Struts和Hibemate
在Spring的托管下,Struts和Hibernate可以利用Spring的特性(IOC);另外Spring对Struts和Hibemate的APR进行了进一步的封装,使得开发更加简单。
1.Spring和Struts的整合
Spring整合Struts有三种方法。方法1:Action继承org.springframework.
web.struts.AdionSuppo~,这种技术很简单并且易于理解。但不幸的是它将Struts动作与Spring框架耦合在一起。方法2:使用org.springffamework,web.struts.
DelegatingRequestProcessor类来覆盖Struts的Reques-tProcessor处理程序。此方法的确比第一种方法好,但是依然存在一些问题。如果要使用一个不同的RequestProcessor,则需要手动整合Spring的DelegatingRequestProcessor。添加代码会造成维护的麻烦将来会降低应用程序的灵活性。方法3:将Struts动作管理委托给Spring。可以通过在Struts-con-fig.mxl动作映射中注册一个来实现。负责在Spring环境中查找Struts动作。由于动作在Spnng的控制之下,所以它可以填充动作的JavaBean属性,并为应用诸如AOP拦截器之类的特性带来了可能。在此我们采用第三种方式。
2.Spring和Hibernate的整合
为使开发者能够以统一的方式同数据库访问技术(如:JDBC、Hibernate等)进行交互,可以使用Spring框架提供的DAO抽象。Spring DAO抽象允许开发者在不同数据库访问技术之间进行切换。Spring框架依据资源管理、DAO实现支持、食物策略,对O/R Mapping进行了集成。
整合的关键在于不直接使用Hibernate API,而是让Spring管理Hibernate。首先定义实体类继承于HibernateDa-oSupport,在此类中通过getHibemateTemplatO获取Hibernate资源的操作。借助于HibernateTemplate我们可以脱离每次数据操作首先获取Session实例、启动事务、提交/回滚事务以及烦琐的try/catch/finally等操作。
关键词:Spring;AOP;Java;框架
中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)03-10753-01
1 引言
AOP(Aspected Oriented Programming)是一种新兴的编程技术,它可以解决OOP和过程化方法不能很好解决的横切(cross-cutting)关注点问题,如:事务、安全、日志等。AOP既可以用于分析设计阶段,也可以用于编码实现阶段,真正实现功能模块的分离,避免代码缠绕。Spring是基于J2EE的轻量级开源开发框架,其中Spring AOP是整个Spring框架的核心组件。
2 Spring AOP 介绍
OOP将应用程序分解成各个层次的对象,而AOP将横切程序的各种关注点分离出来,简化了大型软件的设计 。方面(Aspect)是用Spring的 Advisor或拦截器实现的。Spring IoC容器(BeanFactory 和ApplicationContext)并不强制依赖于AOP,如果不需要,可以不用AOP。但使用AOP,可以提供更强的模块性、可扩展性。
Spring AOP是由纯Java开发的,它实现了AOP联盟的接口。不同于AspectJ的实现,Spring AOP 只实现了方法级别的连接点,已经足够满足J2EE应用。OOP倡导的是基于setter/getter 的方法访问,而非直接访问域。为了使控制反转(IoC)很方便的使用企业级服务,则需要Spring AOP 的实现。Spring AOP 在运行时才创建Advice 对象。
3 Spring AOP 面向方面编程
3.1 创建Advice
AOP 通知包含了方面的逻辑。创建一个Advice 对象,就是在编写实现横切的功能。连接点是用方法拦截器实现的,这意味着你编写的通知将在方法调用的不同点织入程序中。由于在调用一个方法时有几个不同的时间点,Spring 可以在不同的时间点将方面织入程序。Spring AOP提供了四种Advice接口:MethodBeforeAdvice 用于在目标方法调用前触发;AfterReturningAdvice 用于在目标方法调用后触发;ThrowsAdvice 用于在目标方法抛出异常时触发;MethodInterceptor 用于在目标方法执行时触发。如果要实现相应功能,则需要实现上述对应的接口。例如:实现Before Advice,需要实现方法 void before(Method method, Object[] args, Object target)。
3.2 在 Spring 中定义 Pointcut
切入点可以决定特定的类、特定的方法是否匹配特定的标准。如果匹配成功,则通知将应用到此方法上。Spring 切入点用很灵活的方式将通知组织进类中。Spring 中的切入点框架的核心是Pointcut接口,此接口允许定义织入通知中的类和方法。许多方面是通过一系列的通知和切入点组合来定义的。
在Spring中,一个advisor就是一个方面的完整的模块化表示。Spring提供了PointcutAdvisor接口,把通知和切入点组合成一个对象,可以方便的在一个地方管理切入点和通知。切入点分为两类:静态和动态。静态切入点的性能要优于动态切入点,所以应优先考虑使用。对Spring内建的静态切入点类:StaticMethodMatherPointcut,只需要关心setMappedName和setMappedNames方法。可以使用具体的类名,也可以使用通配符。如:设置mappedName属性为set* ,则匹配所有以set为前缀的方法。Spring还提供了静态类:RegexpMethodPointcut,通过使用正则表达式来定义你感兴趣的方法。
当切入点需要运行时参数来执行通知时,需要使用动态切入点。Spring内建的动态切入点类是ControlFlowPointcut,此切入点匹配基于当前线程的调用堆栈,在当前线程执行时找到特定的类和特定的方法时才返回true。大多数的切入点可以静态确定,使用动态切入点有很大的性能损耗。为了增加切入点的可重用性,Spring 提供了切入点上的集合操作――交集和合并。
3.3 用ProxyFactoryBean创建AOP
如果定义一个名字为myfactory的ProxyFactoryBean,引用myfactory的对象所看到的不是ProxyFactoryBean实例本身,而是由实现ProxyFactoryBean的类的 getObject()方法所创建的对象。这个方法将创建一个包装了目标对象 的AOP(Spring倡导基于接口编程)。使用ProxyFactoryBean或者其他IoC可知的类来创建AOP的最重要的优点之一,是IoC可以管理通知和切入点。这是一个非常的强大的功能,能够实现其他AOP框架很难实现的特定的方法。例如,一个通知本身可以引用应用对象(除了目标对象, 它在任何AOP框架中都可以引用应用对象),这完全得益于依赖注入所提供的可插入性。通常,不需要ProxyFactoryBean的全部功能,因为我们常常只对一个方面感兴趣: 例如,事务管理。仅当对一个特定的方面感兴趣时,可以工厂来创建AOP,如:TransactionProxyFactoryBean。
3.4 自动
只有很少类需要被通知时,ProxyFactoryBean 可以很好的工作。当有许多类需要通知时,显式地创建每个就显得很繁琐,Spring提供了自动通过容器来创建的功能。Spring提供了两个类实现自动:BeanNameAutoProxyCreator和DefaultAdvisorAutoProxyCreator。
BeanNameAutoProxyCreator为匹配名字的Bean产生,它可以使用在将一个或者多个方面应用在命名相似的Bean中。自动框架判定将要暴露什么接口,如果目标Bean没有实现任何接口,就会动态产生一个子类。而更强大的自动是:DefaultAdvisorAutoProxyCreator,你所需要做的是在BeanFactory中包含它的配置。Bean定义被加载到Spring容器中后,DefaultAdvisorAutoProxyCreator将搜索上下文中的Advisor,最后它将Advisor应用到匹配Advisor切入点的Bean中。这个只对Advisor起作用,它需要通过Advisor来得到需要通知的Bean。
元数据自动(MetaData AutoProxy)的配置,依赖于源代码属性而不是外部XML配置文件。这可以非常方便的使源代码和AOP元数据组织在同一个地方。元数据自动最常用的地方是用来声明事务。Spring提供了通过AOP框架来声明事务,这与EJB使用声明式事务的功能是相同的。
4 结束语
AOP使得大型、复杂软件的分析设计和实现变得简单,保持功能和代码分离。AOP不会取代OOP,而是OOP的扩展。AOP技术并不复杂,经过短时间的学习就可以掌握。AOP技术已经引入C、C++、Java、C#等许多语言中。Spring 因为引入AOP,比EJB简单、可靠、高效,不依赖于容器,更容易集成、测试和移植。
参考文献:
[1] Rod Johnson. Professional Java Development with the Spring Framework [M],Wiley Publishing,2005.
[关键词] 企业信息化 轻量级框架 Struts Spring Hibernate J2EE
目前软件系统发展已经相当复杂。大型企业信息系统的设计者越来越注重通过一个合适的框架完成系统开发。基于J2EE企业信息系统的平台无关性、层次性、安全性与可扩展性正成为企业信息化的主要解决方案。因此本文通过集成Struts、Spring和Hibernate来实现模块间的解耦,以提高企业信息系统的扩展性、复用性和可维护性。
一、J2EE框架技术
Struts起源于SmallTalk的MVC。即Model、View和Controller。由Controller解耦显示逻辑与业务逻辑,支持实现松耦合结构。面对WebWork、Spring MVC、JSF、Tapestry等,Struts设计成熟、信息资源丰富、开发群体广泛,是目前最常用的表现层MVC。
Spring是一种为解决企业应用程序开发复杂性的轻量级应用程序框架和容器。集成了J2EE许多最佳与前驱性实践。具有传统EJB的关键服务而不依赖于任何组件替代重量级EJB框架。扩展了所集成的组件并提供更高级功能。Spring完成了实际开发所需的单态模式与工厂模式。核心机制是DI(Dependency Injection)与IOC(Inversion of Control)。通过DAO和ORM 实现数据访问的抽象模块,并支持Hibernate。
Hibernate是低侵入ORM(Object-Relationship Mapping)框架。联接了面向对象程序设计语言和关系型数据库。实现了对JDBC的轻量级封装。通过J2EE中的JDBC、JTA、JNDI实现Session、Transaction和数据库连接管理。由HQL以面向对象方式查询持久化对象。ORM框架还包括OJB、TopLink等。OJB是Apache的子项目,开发文档不多,规范一直不很稳定,并未得到广泛支持。TopLink一旦作为商业产品使用则要收取费用。
二、框架的整合与实践
对于一个企业信息系统来说,考虑到虽然系统中各模块实现不同,但原理大同小异。因此,本文以开发的信息子系统为例集成Struts、Hibernate和Spring,并说明系统各层实现。系统架构处理流程如图所示。表现层通过控制器与业务逻辑层交互,业务逻辑层同时处理业务规则与数据访问,再与数据持久层交互。
图 系统的架构处理流程
1.Domain Object
根据系统需求从应用中抽取实体。子系统模型实体类包括:(1)Publisher:者信息。(2)Information:包括标题、内容、时间、图片路径、新闻审核与推荐等。(3)Category:信息分类。(4)View:信息说明或补充评论。用POJO(Plain Old Java Object)作为PO。以Information为例,其中包含Publisher、Category和View类对象。
<class name="informationpub.model.Information" table="information">
<id name=" informationId " column="informationId" type="Integer">//映射标识
<generator class="increment"/></id>
<property name="informationTitle" column="informationTitle" length="30" type="string" not-null="true"></property>
......
<many-to-one name="category"class="informationpub.model.Category"column= "categoryId" not-null="true"/>
......
2.数据持久层
数据持久层采用DAO(Data Access Object)设计模式。对底层数据库提供CRUD操作,对上层业务逻辑提供DAO接口。DAO实现包括三个部分:(1)在DAO接口中声明CRUD等方法。(2)实现DAO接口并扩展支持类。(3)产生DAO实例,实现业务逻辑与持久层的解耦。然后获得DAO 工厂实例,产生DAO组件。通过扩展HibernateDaoSupport和对应DAO接口完成Hibernate实现。传入sessionFactory引用到由HibernateDaoSupport提供的方法中,返回HibernateTemplate实例完成数据库操作。以Information为例的DAO接口实现类如下:
public class InformationDAOHibernate implements InformationDAO{
public void saveInformation (Information information) {
getHibernateTemplate().saveOrUpdate(information); //保存一条信息
……}}
Spring作为DAO工厂。
<beanid="sessionFactory"class="org.springframework.orm.hibernat3.LocalSessionFactoryBean">……//列出并加载PO映射文件
<beanid="informationDAO"class="informationpub.dao.InformationDAOHibernate">
// sessionFactory的依赖注入
<property name="sessionFactory" ref="sessionFactory"/></bean>
可见当数据库结构改变时,仅影响DAO而并不会涉及业务逻辑层。业务逻辑只要专注其自身的实现,而不需要关注底层数据库访问,实现了业务逻辑与特定数据库访问的解耦。
3.业务逻辑层
业务逻辑层完全依赖DAO组件,只需调用DAO接口。用Facade封装多个DAO组件。依赖由Facade提供的一个高层接口。业务逻辑对外提供InforPubFacade接口,表示层只要面向该接口编程,实现了业务层与表示层的解耦。由InforPubFacadeImp扩展InforPubFacade接口实现。InforPubFacadeImp类中将各DAO作为成员属性。
public class InforPubFacadeImp implements InforPubFacade{
private InformationDAO informationDAO;
……//各类的DAO作为成员属性
public void setInformationDAO(InformationDAO informationDAO) {
this. informationDAO = informationDAO;}
public void saveInformation (Information information) {
InformationDAO.saveInformation (information);
}……
}
4.表示层
表示层包括ActionForm和ActionServlet。ActionForm在视图和ActionServlet之间传递数据。由ActionForm 的validate()完成数据验证。ActionServlet再根据接响应完成到Action的转发。再由Action的execute()获取信息完成业务逻辑验证并决定调用的业务逻辑。在Struts中完成Spring容器的加载。不再将ActionServlet拦截的请求转发到struts-config.xml中的Action,而是转发到由Spring容器管理的Action。并由Spring的IOC管理Action。通过DelegatingRequestProcessor扩展Struts的子请求处理器RequestProcessor,将请求转发到action-servlet.xml。
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"value="/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml"/></plug-in><beans>
<bean name="/viewInformation"class="informationpub.web.ViewInformationAction" >//对应struts-config.xml中viewInformation 的Action
<property name="viewInformation">// 为Acion依赖注入
<ref bean=" InforPubFacade "/></property> </bean>
……//其他Action及相应依赖注入
</beans>
三、结束语
本文集成Struts、Hibernate和Spring。系统层次清晰,由Spring贯穿整个系统,无缝整合表示层、业务逻辑层和数据持久层。系统灵活性得到增强。业务逻辑只需实现一次,组件之间以接口方式耦合,实现了企业信息系统最大限度的解耦。开发的系统具有良好的伸缩性与可扩展性,从而提高企业运作效率与降低开发成本,具有一定的现实意义。
参考文献:
[1] James Goodwill. Jakarta struts[M]. O’REILLY Publishing, 2002.
[2] Ted Husted. Struts in Action: Building Web Applications with leading java framework[M]. Manning Publication Company, 2002.
[3] Matt Raible. Spring Live [M]. SourceBeat, 2004.
[4] Rod Johnson. Expert One on One J2EE Development without EJB[M]. Wiley Publishing,2004.
关键词:框架 Struts Spring Hibernate
SSH是struts+spring+hibernate的集成框架,是当前Web应用程序开发采用比较多的一种开源框架技术。本文主要对SSH框架的技术优势及各组成部分的特点进行分析介绍。
一、SSH框架技术优势
SSH框架是基于传统J2EE框架的新技术,SSH框架继承了J2EE的分层架构模式,二者的不同之处仅在于层与层之间的实现方法。当J2EE框架和SSH架构完成相同的运算任务时,SSH框架消耗的系统资源最少。
SSH框架在业务对象的的平台专用性上没有特殊的限定要求,在SSH框架中业务逻辑的实现通过普通的Java对象即可完成。
SSH组合框架技术优势体现在四个方面:一、分离了Java代码和HTML代码,降低了对开发人员要求的复合度。二、是系统的层与层之间的工作相是对独立的,代码耦合度低。三、即使脱离了Spring环境的AOP机制,也不会妨碍AOP实现业务的功能。四、与SSH配合使用的Hibernate等夸平台技术开源性极强,促使了SSH框架的飞速发展。
SSH的技术优势使得采用SSH框架技术开发的系统具备了很强的可拓展性、可移植性。同时,采用开源的SSH框架能够大大简化系统开发的复杂度,缩短系统开发时间。
二、Struts
Struts与SSH框架一样同样具有开源性,合理恰当的使用Struts技术可以在一定程度上减少基于MVC模型的Web应用系统的开发时间,从而有效控制系统开发成本。事实上,绝大多数程序员在在使用Servlets和JSP的可扩展的应用时已经将Struts框架技术作为系统开发的标准。
Struts技术基于MVC框架,Struts的实现依赖Servlet和JSP实现。EJB 和JavaBean两个组件是Struts框架业务功能实现的基础部件;Action和ActionServlet部件是框架实现控制功能的重要部件;视图部分则是由若干存在内在联系的.JSP文件有机构成,来实现系统功能。其工作原理如图一所示:
1.使用者通过浏览器客户端发送HTTP协议的数据请求。
2.HTTP请求到达服务器后,经过控制器,使用框架结构填充Form Bean。
3.经过填充的数据请求通过框架中控制器的Action组件进行数据业务处理。
4.经过控制器处理过的业务数据调用Struts的基础部件实现业务逻辑。
5.将业务逻辑经过转换形成JSP业务进行处理,并将处理结果反或
6.用户在客户端或者浏览器上得到HTTP请求的响应。
三、Spring
Spring在整个系统体系中提供两种控架,一种是面向方面编程(AOP)容器框架,另外一种是轻量级的反向控制。
Spring的核心部分是轻量级控制反转(Inversion of Control,IoC)容器。通过外部的配置文件翻过来调用应用程序来替代原有应用程序调用的控制功能是控制反转的基本思想。
在框架中进行控制功能的创建工作就实现了轻量级控制反转,这样就能使控制功能的编写其从应用程序的编写中分离出来。在使用组件调用容器时,那么在框架中的控制功能创建中只需要给出调用组件所用到的对象。典型的轻量级控制反转工作过程如下:首先创建程序中以后所用到的所有对象,并进行对象属性设置,对相关的属性和惯性进行连接配置,最后再确定调用的方法和时间点即可。
Spring架构的反转控制提供了应用场景和复杂程度不同的两种注入方式:构造器注入和Setter依赖注入(Dependency Injection)两种注入方式。Spring支持在实际开发中应用的最为广泛方法注入Setter(Setter Injection)方法,这种方法使用起来更加直观、方便。
四、 Hibernate
在面向对象程序设计中,关系数据库中的表间的关系与对象间关系的匹配没有有效的转换来完成匹配,Hibernate的出现可以很好地完成二者之间的关系匹配问题。
Hibernate可以将对象间关系按照一定的逻辑与数据库中表之间的关系进行高耦合度的匹配,这种转换由Hibernate自动进行[20]。使用Hibernate可以减少原来面向对象程序设计时大量的程序与数据库之间SQL的转换,有效提高开发效率。
Hibernate是Java平台上高效的ORM映射框架。由于Hibernate使用了反射和运行时字节码生成技术,所以对于最终用户而言,Hibernate几乎是透明地运行。
Hibernate的执行流程如图二所示:
1. 通过实例化Configuration对象,解析文件,建立对象与数据库之间的映射关系。
2. 通过创建Session工厂,运用session变量,对数据库进行操作。
3. 通过创建事务Transation,对对象进行持久化操作。
4. 提交事务,关闭打开的会话,结束操作。
纵观整个开发过程,Hibernate承接应用程序和基础数据库,通过Hibernate,应用程序能够方便地将对象注入到数据库中。由执行流程可以看出,Hibernate通过配置文件及利用数据库作为支撑持续不断地向应用程序提供服务。换个意思来讲,是通过配置文件把普通Java对象直接映射到关系数据库中,并直接作为关系数据库的表存储起来。
SSH是开源的框架技术,它可以部署在AP ACH E等便宜的服务器上,可以脱离大型服务器的约束,从而节省成本开支。另外,SSH作为一款轻量级的框架,还能够与异步JavaScript和XML框架同时使用,能够较大程度上降低系统开销,还能够较大幅度改善用户的体,从而大大提高系统的性能。
参考文献:
[1]梁立新.项目实践――基于Struts Spring Hibernate的Java应用开发[M]. 电子工业出版社, 2006: 23~24
[2]陈天河. Struts Hibernate Spring集成开发宝典[M]. 电子工业出版社, 2007: 56~58
[3]穆福森,吴观茂. 基于Struts+Spring+Hibe
rnate Web应用开发框架技术[J].电脑知识与技术, 2006(2): 81~82
[4]罗时飞. 精通Spring2.0[M]. 电子工业出版社, 2007: 50~57