前情提要:事物在Mysql数据库中已经学过,具有ACID的特性
1、Spring事物管理分为两类:
声明式事物:AOP
编程式事物:需要在代码中,进行事物的管理
编程式事物还是没有AOP的统一处理的优势
1.1、以AOP配置事物的方式:
官网原话: 要开启 Spring 的事务处理功能,在 Spring 的配置文件中创建一个 DataSourceTransactionManager 对象:
<!--配置声明式事物-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource" />
</bean>
然后配置AOP中的通知,针对事物的,这里Spring帮忙给写好了,就不需要再写切面类了,这里可以定义什么方法会有事物参与。
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--给哪些方法配置事物-->
<!--配置事物的传播特性:propagation(默认是REQUIRED,没有事物就添加事物) -->
<tx:attributes>
<!--<tx:method name="add" propagation="REQUIRED"/>
<tx:method name="del"/>
<tx:method name="update"/>
<tx:method name="query"/>-->
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
配置事物的切入点
<!--配置事物切入-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* com.wcy.mapper.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
这样就可以实现针对于所有方法进行事物处理。
注:事物的传播特性有以下几个,就是遇到各种情况怎么处理事物,加还是不加,默认就是 REQUIRED