SpringAOP测试


简单转账功能

新建Java项目

SpringAopLieJie;

mysql创建数据

# 删除spring_aop数据库
drop database if exists spring_aop;
# 创建spring_aop数据库
create database spring_aop;
# 使用spring_aop数据库
use spring_aop;
# 创建account表
create table account (
id int(11) auto_increment primary key,
accountNum varchar(20) default NULL,
money int(8) default 0
);
# 新增数据
insert into account (accountNum, money) values
("622200001",1000),("622200002",1000);

导包

项目代码结构:

Utils——数据库连接工具类:ConnectionUtils.java

entity——实体类:Account.java

Dao层:AccountDao.java

Dao层实现类:AccountDaoImpl.java

Service层:AccountService.java

Service层实现类:AccountServiceImpl.java

Test——测试类:AccountTest.java

测试结果:

mysql结果图:

报异常——用事务处理,开启事务,提交、回滚等

引入代理模式解决事务

事务管理器:TransactionManager.java

事务代理工具类:TransactionProxyUtils

引入AOP

代码:

1.删除事务代理工具类:TransactionProxyUtils

2.导包


<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjweaverartifactId>
<version>1.9.3version>
dependency>

3.添加AOP配置——


<aop:config>

<aop:pointcut expression="execution ( * services.*.*(..))" id="pc"/>

<aop:aspect ref="transactionManager">
<aop:before method="beginTransaction" pointcut-ref="pc"/>
<aop:after-returning method="commit" pointcut-ref="pc"/>
<aop:after method="release" pointcut-ref="pc"/>
<aop:after-throwing method="rollback" pointcut-ref="pc"/>
aop:aspect>
aop:config>