声明式事务
Spring对声明式事务的支持实际上是spring的aop框架的一个实现。Aop显然很适合来实现声明式事务管理,因为事务是系统级的服务,应该是在应用程序主功能的上面一层。你可以把spring的事务认作是包装了一个方法的切面。
PlatformTransactionManager:平台事务管理器.真正管理事务的对象.会在SpringJDBC或者Ibatis进行持久化数据时候使用.
TransactionDefinition:事务定义信息(隔离级别,传播行为,超时信息,是否只读)
TransactionStatus:事务的状态,记录事务的状态.
以下是通过xml文件进行事务的管理:<!-- 配置事务管理器 -->
< beanid="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< propertyname="dataSource"ref="dataSource" />
</ bean >
<tx:adviceid="txAdvice"transaction-manager="transactionManager">
<tx:attributes>
<tx:methodname="transfer"propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- the transactional advice (what 'happens'; see the <aop:advisor/> bean
below) 事务传播特性配置 -->
<tx:adviceid="txAdvice"transaction-manager="txManager">
<!-- the transactional semantics... -->
<tx:attributes>
<!--
isolation="DEFAULT" 隔离级别
propagation="REQUIRED" 传播行为
read-only="false" 只读
timeout="-1" 过期时间
rollback-for="" -Exception
no-rollback-for="" +Exception
-->
<tx:methodname="add*"propagation="REQUIRED"isolation="DEFAULT"
rollback-for="java.lang.Exception"/>
<tx:methodname="save*"propagation="REQUIRED"isolation="DEFAULT"
rollback-for="java.lang.Exception"/>
<tx:methodname="insert*"propagation="REQUIRED"isolation="DEFAULT"
rollback-for="java.lang.Exception"/>
<tx:methodname="update*"propagation="REQUIRED"isolation="DEFAULT"
rollback-for="java.lang.Exception"/>
<tx:methodname="modify*"propagation="REQUIRED"isolation="DEFAULT"
rollback-for="java.lang.Exception"/>
<tx:methodname="delete*"propagation="REQUIRED"isolation="DEFAULT"
rollback-for="java.lang.Exception"/>
<!-- 查询方法 -->
<tx:methodname="query*"read-only="true"/>
<tx:methodname="select*"read-only="true"/>
<tx:methodname="find*"read-only="true"/>
</tx:attributes>
</tx:advice>
还可以通过注解来做Spring的声明式事务:
1:配置事务管理器:
<beanid="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource"ref="dataSource"/>
</bean>
2:开启事务管你的注解:
<tx:annotation-driverntransaction-manager="transactionManager"/>
3:在使用事务的类上添加一个注解:@Transactional即可
Spring配置声明式事务如何实现?
是通过使用内置 TransactionProxyFactoryBean 为目标对象创建AOP代理对象,通过指定TransactionManager对目标对象的方法添加事务管理操作 .TransactionProxyFactoryBean参考一个方法的事务的属性来决定怎样管理那个方法上的事务策略。但是TransactionProxyFactoryBean从哪里得到一个方法的事务属性的呢。如你所见,TransactionProxyFactoryBean有一个transactionAttributeSource的property。这个property就代表着一个TransactionAttributeSource的实例。一个TransactionAttributeSource就是作为一个引用来查找设置在方法上的事务属性的。
欢迎阅读,要是哪里有误,还请路过的大神不吝赐教呀!