简单转账功能
新建Java项目:
SpringAopLieJie;设置Maven版本、配置文件以及仓库
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.导包
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.3</version>
</dependency>
3.添加AOP配置——
<!-- aop相关的节点配置 -->
<aop:config>
<!-- 切入点 表示哪些类的哪些方法在执行的时候会应用Spring配置的通知进行增强 -->
<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>