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>