Spring框架的事务管理应用分析_第1页
Spring框架的事务管理应用分析_第2页
Spring框架的事务管理应用分析_第3页
Spring框架的事务管理应用分析_第4页
Spring框架的事务管理应用分析_第5页
全文预览已结束

下载本文档

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

文档简介

1、Spring框架的事务管理应用分析        摘 要 介绍了J2EE平台上Java Web开发的Spring框架的原理和特性,对其事务管理方面的应用进行了分析。关键词 Spring; J2EE; 控制反转; 事务处理引 言在软件开发中出现过各种各样的框架,开源软件的兴起,使得各种各样的框架纷纷出现,例如,Apache组织下就拥有诸多的框架类产品。框架就是一组协同工作的类,它们为特定类型的软件构筑了一个可重用的设计。然而,传统的框架使得应用组件过分依赖于框架中的类,这种耦合度的提高降低了组件的复用性。Spring

2、框架的出现,使得组件之间更松散的耦合成为了可能。Spring框架简介Spring框架是一个2003年2月才出现的开源项目,该开源项目起源自Rod Johnson在2002年末出版的Expert One-on-One J2EE Design and Development一书中的基础性代码。在该书中,Rod Johnson倡导J2EE实用主义的设计思想,而Spring框架正是这一思想的更全面和具体的实现。Spring框架由一个容器,一个配置和组织组件的框架,和一组内置的为事务、持久化和Web用户接口提供的服务组成。作为一种轻量级的J2EE框架,Spring提供了一种有效的方式来建立和组织J2EE

3、应用程序。1、Spring特性IoC(Inversion of Control;控制反转);又称DI(Dependency Injection;依赖注入);是面向对象领域新兴的编程思想;也是Spring的精髓所在。简单地说;IoC就是指程序之间的关系由容器来控制;而不是传统实现中由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码转到外部容器,控制权的转移,也就是所谓的反转。IoC将控制创建的职责搬进了框架中;并把它从应用代码脱离开来。当使用Spring的IoC容器时只需指出组件需要的对象,在运行时Spring的IoC容器会根据XML配置提供给它。Spring IoC,借助

4、于依赖注入设计模式,使得开发者不用理会对象自身的生命周期极其关系,而且能够改善开发者对模式的使用。对于一个对象的管理不是什么困难,难就难在对整个对象群的管理。依赖注入可以让容器管理对象,即“Dont call me, I will call you”。这样对象本身的生命周期以及对象之间的关系就不再让开发者费神了。 Spring AOP,借助于Spring实现拦截器,开发者能够实现以声名方式使用级服务,比如安全性服务、事务服务。AOP 合理的补充了OOP,借助于Spring AOP,开发者能够高效的使用J2EE服务。Spring服务抽象,借助于各种J2EE API抽象,使得开发者能够一致地使用J

5、2EE 技术,而不管具体是使用什么J2EE API,借助于Spring服务抽象,使代码大大减少,满足“更少代码,更少BUG”的软件设计原则。Spring IoC+Spring AOP+Spring服务抽象,一起形成Spring,这样一个有机体,使构建轻量级J2EE成为可能。Spring提供的事务管理Spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活方便。1、传统使用JDBC的事务管理以往使用JDBC进行数据操作,使用DataSource,从数据源中得到Connection,我们知道数据源是线程安全的,而连

6、接不是线程安全的,所以对每个请求都是从数据源中重新取出一个连接。一般的数据源由容器进行管理,包括连接池。例如TOMCAT,WEBSPHERE,WEBLOGIC等这些J2EE商业容器都提供了这个功能。以往的我们使用JDBC在写代码时,事务管理可能会是这样:Connection conn = null;tryconn = DBConnectionFactory.getConnection;conn.setAutoCommit(false);/do somethingmit(); /commit transcationcatch(Exception e)conn.rollback();finally

7、tryconn.close(); catch(SQLException se) /do sth./close ResultSet,PreparedStatement,Connection /notice:Maybe ocurr Exception when u close rs,pstmt,conn按照以往的思路来写代码,代码量比较长,而且容易疏忽,忘掉一些try/catch,引发一些异常无法catch,虽然有时候我们会写DBTool类,来关闭这些资源,并且保证在关闭这些资源时,不向外抛异常,但是这样做会导致额外的麻烦。2、Spring提供的编程式的事务处理Spring提供了几个关于事务处理的

8、类:TransactionDefinition /事务属性定义TranscationStatus /代表了当前的事务,可以提交,回滚。 PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。1         我们使用编程式的事务管理流程可能如下:(1) 声明数据源。(2) 声明一

9、个事务管理类,例如:DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等(3) 在我们的代码中加入事务处理代码:TransactionDefinition td = new TransactionDefinition();TransactionStatus ts = transactionManager.getTransaction(td);try/do sthtransactionMmit(ts);catch(Exception e)transactionManager.rollback(

10、ts);使用Spring提供的事务模板TransactionTemplate:void add()transactionTemplate.execute( new TransactionCallback()pulic Object doInTransaction(TransactionStatus ts) /do sthTransactionTemplate也是为我们省去了部分事务提交、回滚代码;定义事务模板时,需注入事务管理对象。3、Spring声明式事务处理Spring声明式事务处理也主要使用了IoC,AOP思想,提供了TransactionInterceptor拦截器和常用的代理类Tra

11、nsactionProxyFactoryBean,可以直接对组件进行事务代理。使用TransactionInterceptor的步骤:(1)定义数据源,事务管理类(2)定义事务拦截器,例如:bean id = "transactionInterceptor" class="erceptor.TransactionInterceptor"property name="transactionManager"ref bean="transactionManage

12、r"/propertyproperty name="transactionAttributeSource"valuecom.test.UserManager.*r=PROPAGATION_REQUIRED/value/property/bean(3)为组件声明一个代理类:ProxyFactoryBeanbean id="userManager" class="org.springframework.aop.framework.ProxyFactoryBean"property name="proxyInterfac

13、es"valuecom.test.UserManager/value/propertyproperty name="interceptorNames"listidref local="transactionInterceptor"/list/property/bean使用TransactionProxyFactoryBean:bean id="userManager"class="erceptor.TransactionProxyFactoryB

14、ean"property name="transactionManager"ref bean="transactionManager"/propertyproperty name="target"ref local="userManagerTarget"/propertyproperty name="transactionAttributes"propsprop key="insert*"PROPAGATION_REQUIRED/propprop key="update*"PROPAGATION_REQUIRED/propprop key="*"PROPAGATION_REQUIRED,readOnly/prop/props/property/beanTransactionProxyFactoryBean只是为组件的事务代理,如果我们要给组件添加一些业务方面的验证等,可以使用TransactionTemplate加拦截

温馨提示

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

评论

0/150

提交评论