问题描述
我们都知道,我们定义一个切面,然后绑定一个切点后,这个切面就能在合适的时间自动切入切点。对于@AfterThrowing
和@Around
,我们可以再切面中捕获异常,处理异常。
我们也知道,我们对一个方法添加事务,那么当此方法抛出异常后,事务会捕获异常,自动执行混滚。
那么,如果添加事务的方法就是我们说的那个切点呢?这个方法(切点)在同时添加了事务和切面的情况下,如果这个方法抛出了异常,代码会怎么执行呢?
对结果的猜测
代码执行的效果无非以下三种情况:
1. 切面执行,事务不执行;
2. 切面不执行,事务执行;
3. 切面和事务都执行;
我们对这三种猜测进行如下的验证。
验证
1、创建一张表
CREATE TABLE `tb_test` (
`username` varchar(12) NOT NULL,
`password` varchar(12) NOT NULL,
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2、定义一个pojo
import java.io.Serializable;
public class MyTestDO implements Serializable {
private static