一、Spring提供的两种事务控制
- 编程式事务控制:需要自己使用Java的API去写代码
- 声明式事务控制:只需要配置就可以了
先学编程式事务控制了解原理,之后在使用声明式事务控制时就知道那些参数到底应该如何配置了
编程式事务控制三大对象:
- PlatformTransactionManager
- TransactionDefinition
- TrasactionStatus
Spring的声明式事务控制,就是在配置文件中采用声明的方式来进行事务控制,它的底层其实就是AOP
二、基于xml的事务控制配置
事务控制有个经典案例:转账问题,这里我们的userService对象就有转账的方法,一个转出一个转入,
所以要进行事务控制,另外之前说过Spring的事务控制是用AOP实现的,这个userService就相当于目标对象
而userService的transfer()转账方法就是切点,Advice就是事务增强。
配置的大体流程:平台事务管理器---->事务增强---->织入
<!--目标对象,内部的方法就是切点-->
<bean id="accountService" class="com.lxl.service.impl.AccountServiceImpl">
<property name="accountDao" ref="accountDao"/>
</bean>
<!--配置一个平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--Advice,事务增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--设置事务的属性信息-->
<tx:attributes>
<!--name代表方法,可以对每个方法单独配置,或者使用*进行统一配置-->
<tx:method name="transfer" isolation="DEFAULT" propagation="REQUIRED" timeout="-1"/>
<!--<tx:method name="*"/>-->
</tx:attributes>
</tx:advice>
<!--配置AOP:进行事务的织入-->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.lxl.service.impl.*.*(..))"/>
</aop:config>