Spring管理事务操作的几种方式_第1页
Spring管理事务操作的几种方式_第2页
Spring管理事务操作的几种方式_第3页
Spring管理事务操作的几种方式_第4页
Spring管理事务操作的几种方式_第5页
全文预览已结束

下载本文档

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

文档简介

1、spring管理事务操作的几种方式在java工程中,通常会涉及到事务操作处理。通过spring可以实现对事务操作的管理,简化 代码。下面详细介绍spring管理事务操作的几种方式及其具体应用。在讲解具体操作方式之前,先定义公共的beam言息,xml文件中实现代码如下:xml代码在定义hibernate的配置文件中添加以下代码,声明事物操作bean:<!-定义事务管理器(声明式的事务)><bean id=mtransactionmanageruclass=uorg.springframework.orm.hibernate3.hibernatetransactionmanage

2、ru><property name=nsessionfactoryu><ref local=msessionfactoryh /></property></bean>在定义service的毗置文件中添加以下代码,声明service bean:<!-业务逻辑层(是对各个dao层的正面封装)主要用到vv门面模式» -><bean id="fundservice"class=ncom.jack.fiind.service.serviceimpl.fundservicen><propert

3、y name=moperdaon><ref bean=hopera(ordaom /></property></bean>可能还有其他很多模块。<bean id="fundservice"/>可能只是其中的模块。在实际应用时,只要将需要事务处理的service方法名称定义为以deleteupdate> add> save 开头,在运行时出现异常后,会白动回滚。第一种:配置声明式事务的方法如下。这种是我们最常用的方法了,它适用于你的库表比较少的情况下。xml代码<bean id="fundser

4、vicedaoproxymclass=horg<ercept or. transactionproxyfactorybeanm><!-配置事务管理器-><property name=htransactionmanagerh><ref bean=ntransactionmanagern /></property><!-此属性指定目标类本省是否是代理的对象.如果目标类没有实现任何类,就设为true 代表自己-><property name=mproxytarg

5、etclassu><value>false</value></property><property name=nproxylnterfacesu><value>com.jack.fund.service.ifundservice</value></property><! h 标bean -><property name=htargeth><ref bean=hfundservicen /></property><!-配置事务属性-><pro

6、perty name=mtransactionattributes"><props><prop key=hdelete*h>propagation_required</prop><prop key=,add*h>propagation_required</prop><prop key=nupdate*n>propagation_required</prop><prop key=nsave*h>propagation_required</prop><prop key=

7、"find*',>propagation_required,readonly</prop></props></property></bean>以下可能还有其他的xxxservicedaoproxy.大家可以看出针对每一个功能模块配置一个业务 代理服务。如果模块多大话,就显得代码有点多了,发现他们只是稍微一点不一样。这时我们就应该想 到继承的思想。用第二种方法。第二种:配置声明式事务的方法如下。这种情况适合相对比较多的模块时使用xml代码<!-利用继承的思想简化配置,要把abstract=mtruen -><

8、;bean id=utransactionbasehclass=ercepto 匚 transaciionproxyfactorybcaiv lazy-init=ntrueh abstract=ntrueh><!-配置事务管理器-><property name=,transactionmanagern><ref bean=ntransactionmanageru /></property><!-配置事务属性-><property name=,trans

9、actionattributes'<props><prop keyidele(e*“>propagation_requiredv/prop><prop key=,add*n>propagation_required</prop><prop key=" update*u>propagation_required</prop><prop key=hsave*h>propagation_required</prop><prop key=hfind*n>propagati

10、on_required,readonly</prop></props></property></bean>而具体的模块可以简单的这样配置。只要指明它的parent (父类)就可以了。父类一般把abstract=htrue因为在容器加载的时候不需要初始化,等到用的时候再有它的子 类调用的时候,再去初始化。xml代码<bean id=nfundservicedaoproxyh parent=,transactionbaseh ><property name=mtargeth><ref bean=,fundservicem

11、 /></property></bean><bean id=nfundservicedaoproxym parent=mtransactionbasem ><property name=mtargetu><ref bean=,fundservice'r /></property></bean>这样配置的话,如果有多个像fundservice这样模块时,可以少些很多重复的代码。第三种:配置声明式事务的方法如下。主要利用beannameautoproxycreator自动创建事务代理xml代码<

12、bean id=utransactioninterceptorhclass=horg.springframework.transactio n. interceptor. tra nsactionlnterceptof、<property name=mtransactionmanagern><ref bean=ntransactionmanagerm /></property><!-配置事务属性-><property name=ntransactionattributesh><props><prop key=udel

13、ete* m>propagation_required</prop><prop key="add;:n>propagation_required</prop><prop key=',update*h>propagation_required</prop><prop key=“save*”>propagation_required</prop><prop key=hfind*h>propagation_required,readonly</prop></pro

14、ps></property></bean><beanclass=norg.springframework.aop.framework.autoproxy. beannameautoproxycreatorm><property name=nbeannamesn><list><value>fundservice</value></list></property><property name=minterceptornamesh><list><value&

15、gt;tra nsactionlnterceptor</value></list></property></bean>这种方法主要利用了拦截器的原理。前三种方法一般都必需指定具体的模块bean.如果模块过多话,比如一个大型的网站一般有几十个模块,我们就得考虑用第四种的配置方 式了。自动创建事务代理的方式了。第四种:配置声明式事务的方法如下。xml代码<bean id=utransactionlnterceptornclass=hercepto 匚 tnmsactionlr

16、hercepiof、<property name=htransactionmanagern><ref bean=mtransactionmanagern /></property></bean><!-自动代理一><bean id=nautoproxyhclass=horg.spri ngframework.aop. framework, autoproxy. bea nn ameautoproxycreatorm> <!-可以是service或dao层(最好是针对业务层*service)-><proper

17、ty name=mbeannamesu><list><value>*service</value></list></property><property name=hinterceptornamesn><list><value>transactionlnterceptor</value></list></property></bean>白动代理还有一种用法就是结合正则表达式和advice使用。xml代码<bean id二"tran

18、sactioninterceptor”class=ercepto 匚 tran sactionlnterceptorn><property name=mtransactionmanagerh><ref bean=%ransaclionmanager” /></property></bean><bean id=h autoproxy creatornclass=horg.springframework.aop.framework.autoproxy.defaultadvisorautoproxycreatorm ></bean><bean id=nregexpmethodpointcutadvisornclass=,org.

温馨提示

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

评论

0/150

提交评论