27Spring_的事务管理_银行转账业务加上事务控制_基于tx.aop进行声明式事务管理

时间:2023-03-10 05:31:18
27Spring_的事务管理_银行转账业务加上事务控制_基于tx.aop进行声明式事务管理

上一篇文章中,银行转账业务没有使用事务,会出现问题,所以这篇文章对上篇文章出现的问题进行修改。

事务 依赖 AOP , AOP需要定义切面, 切面由Advice(通知) 和 PointCut(切点) 组成 !

项目结构图:

aaarticlea/png;base64,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" alt="" />

这个案例和前一篇文章的案例是一样的,我们修改的其实只是ApplicationContext.xml文件,其他代码不会变所以这里就不多做解释了。

直接给出ApplicationContext.xml代码。里面的注释好好看一下。

<?xml version="1.0" encoding="UTF-8"?>
<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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> -->
<!-- 引入peoperties文件 -->
<!-- <context:property-placeholder location="classpath:db.properties"/> -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:db.properties"/>
</bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"></property>
<property name="user" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean> <bean id="AccountDao" class="cn.itcast.dao.AccountDaoimpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="AccountService" class="cn.itcast.service.AccountServiceimpl"> </bean>
<!-- 第一步:配置事务管理器 -->
<!-- 事务管理器
之前提过的。事务管理器针对不同的持久层有不同的类,比如Spring自带的SpringJdbc,Hibernata等等。这里用的
就是Sping自带的Jdbc,所以这里用的类是DataSourceTransactionManager
-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--
为什么要把dataSource交给transactionManager(事务管理器),
因为事务管理器,需要从数据源获取连接,才能开启事务,提交事务,回滚事务 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--第二步: 配置通知, -->
<!-- 需要通知(Advice),用来对事务增强 。其实advice代表的是环绕前,环绕后要干的事情,
环绕前,环绕后用来干嘛,不就是开启事务,提交事务吗?但是开启事务,提交事务由什么来完成呢?不就是
transactionManager来做。 -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <!-- 接下来配事务的配置属性,为什么要配?这样的话,对什么方法,应用怎样的事务配置就知道了。这些配置信息就会成为TransactionDefinition对象
TransactionDefinition里面有什么还记得吗?
之前的论文提过的有四类:1.以ISOLATION开头的 ISOLATION_* :事务隔离级别
2.PROPAGATION_* 事务的传播行为等四个。 -->
<tx:attributes>
<!--
name 方法名
isolation 隔离级别
propagation 传播行为
timeout 超时时间
read-only 是否只读 (false代表可以更改,true的话代表不能更改) rollback-for 配置一些异常类型,发生这些异常 回滚事务。
no-rollback-for 配置一些异常类型,发生这些异常不 回滚事务。
如果没有配置上面两个,默认发生什么异常都要回滚,
-->
<tx:method name="transfer" isolation="DEFAULT" propagation="REQUIRED" timeout="-1" read-only="false"/>
</tx:attributes>
</tx:advice> <!-- 通知都有了接下来第三步就是配置切面了 -->
<aop:config>
<aop:advisor advice-ref="transactionAdvice" pointcut="execution(* cn.itcast.service.AccountServiceimpl.*(..) )"/> </aop:config> </beans>

执行结果:已经有事务的控制了。要不一起成功要不都不成功。

注意!注意!

Spring事务管理Advice,是基于Spring 传统AOP, 所以使用aop :advisor配置