声明式事务(XML)【理解】【重点】

来源:互联网 发布:城乡居民收入差距数据 编辑:程序博客网 时间:2024/06/16 19:38

思路分析:将编程式事务中的通用代码抽取出来,制作成独立的around通知使用AOP工作原理,将事务管理的代码动态织入到原始方法中。由于该功能使用量较大,Spring已经将该通知制作完毕。

1.开启tx命名空间

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

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

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

xsi:schemaLocation="

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

http://www.springframework.org/schema/beans/spring-beans.xsd

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

http://www.springframework.org/schema/aop/spring-aop.xsd

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

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

">

2.定义Spring提供的事务管理通知

<!-- 事务管理Advice,由Spring提供 -->

<tx:advice id="txAdvice" transaction-manager="txManager">

<tx:attributes>

<tx:method name="transfer"/>

</tx:attributes>

</tx:advice>

注意:TxAdvice需要为其指定一个事务管理器的Bean

<!-- 声明事务管理器的Bean,该Bean依赖数据源对象 -->

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property>

</bean>

3.设置AOP

<aop:config>

<aop:advisor advice-ref="txAdvice" pointcut="execution(void *..*.*.trans*(..))"/>

</aop:config>

4.将原始编程式事务控制中的控制代码删除

5.advice的参数

tx:advice:定义事务管理的通知(环绕通知)

transaction-manager:声明事务管理的实现类

tx:method:定义参与事务管理的方法

7.事务传播行为 配置的是事务协调员(事务加入者)针对事务管理员(事务发起者)所携带的事务的处理态度 事务管理者(业务) 事务协调员(数据) REQUIRED T1 T1 无 T2 REQUIRES_NEW T1 T2 无 T1 SUPPORTS NOT_SUPPORTED MANDATORY NEVER NESTED T1 无 T1 无 T1 无 T1 无 savePoint()

T1 无 无 无 T1 错误 错误 OK

0 0