加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用XML进行声明式事务管理

发布时间:2020-12-15 23:48:42 所属栏目:百科 来源:网络整理
导读:今天看了看Spring的声明式事务管理,写了一点小总结,希望对大家有帮助,本人也是刚开始学Spring,如果不到之处还望大家多多指导和指正,如果有问题QQ联系 1281027677, 转载请指明作者 使用 XML 进行声明式事务管理 前言: Spring 对于各种各样的 ORM 框架 (

今天看了看Spring的声明式事务管理,写了一点小总结,希望对大家有帮助,本人也是刚开始学Spring,如果不到之处还望大家多多指导和指正,如果有问题QQ联系 1281027677, 转载请指明作者

使用XML进行声明式事务管理

前言:

Spring对于各种各样的ORM框架(包括JDBC)都可以它进行声明式事务管理,以下讲

解的是SpringHibernate的声明式事务管理,也是用的最多的;

一.导入命名空间并注入SessionFactory

1.spring配置文件中beans元素中:

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation=”

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

2.注入SessionFactory;

二.配置Hibernate事务管理器

1.

<beanid="transactionManager"

class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<propertyname="sessionFactory">

<refbean="mySessionFactory"/>

</property>

</bean>

注意:

(1)使用HibernateTransactionManager类管理事务,其实这个类就相当于一个

aspect(切面类),运用了AOP原理;

(2)这是作为公共使用的事务管理器Bean。这个会事先配置好,不需要各个模块各

自去配(也就是有多个spring配置文件时);

(3)HibernateTransactionManager这个类怎么管理事务呢?这里就使用了

SessionFactory,从SessionFactory中获取连接,所以这里需要需要注入一个

SessionFactory;

三.通过<tx:advice>创建事务处理通知:

<!--<tx:advice>需要设置一个TransactionManager,所以这里指定事务管理器-->

<tx:adviceid="txAdvice"transaction-manager="txManager">

<!--通过<tx:attributes>设置相关属性-->

<tx:attributes>

<!--所有以get开头的方法,都是只读型事务-->

<tx:methodname="get*"read-only="true"/>

<!--所有以add开头的方法的事务传播性都设置为required-->

<tx:methodname="add*"propagation="REQUIRED"/>

</tx:attributes>

</tx:advice>

四.配置使用事务通知的切入点:

<aop:config>
<!--定义一个切入点-->

<aop:pointcutid="bussinessService"

expression="execution(public*com.service..*.*(..))"/>

</aop:config>

五.将事务通知与通知切入点组合:

<aop:config>

<!--

Advisor代表Spring中的Aspec,但是,与正常的Aspect不同,

Advisor通常只持有一个Pointcut和一个Advice。所以,我们可以

认为Advisor是一种特殊的Aspect;

<aop:advisor/>:将事务通知与切入点组合

-->

<aop:advisoradvice-ref="txAdvice"pointcut-ref="bussinessService"/>

</aop:config>

完整代码配置如下:

      <bean id="txManager"
  		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  		<property name="sessionFactory" ref="sessionFactory" />
  	</bean>
  
  	<tx:advice id="txAdvice" transaction-manager="txManager">
  		<tx:attributes>
  
  			<!--  所有以get开头的方法,都是只读型事务  -->
  			<tx:method name="get*" read-only="true" />
  			<!--  所有以add开头的方法的事务传播性都设置为required  -->
  			<tx:method name="add*" propagation="REQUIRED" />
  
  		</tx:attributes>
  	</tx:advice>
  	
  	<aop:config>
  		<aop:pointcut id="bussinessService"
  			expression="execution(public * com.service..*.*(..))" />
  		<aop:advisor advice-ref="txAdvice" pointcut-ref="bussinessService" />
  	</aop:config>

讲解:

<txadvice>标签表示一个事务的advice(通知),它需要设置一个

TransactioinManager, 这里引用了txManager,在<tx:advice>内部使用<tx:aattributes>

来设置相关属性;

每一个<txmethod>表示设定一个需要纳入事务的方法,这里支持组配置,

<txattributes>内部可以有多个<txmethod><txmethod>中可以配置

propagation(事务传播性设置)isolation(事务的隔离级别)timeout(事务超时)

read-only(读写型事务后者只读型事务)等等.....

结合一个<aop:config>来配置事务,通过这里的<aop:config>中的<aop:advisor>将事

务通知(advice)和通知切入点(pointcut)组合;

总结:

1.使用XML方式还是使用Annotation方式来进行声明声明式事务管理?

虽然使用Annotation的方式比较简单,但是如果需要添加事务管理的方法比较多时, 这时候就会显得力不从心了,需要配置很多个@Transactional;

而使用XML的方式可以通过通配符的方式,一次为多个方法添加事务管理;

所以,大多数的情况下,都是使用XML的方式进行声明式事务管理;


分享是一种美德,谢谢大家的阅读,如果问题希望大家多多指正 ----- [大饼]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读