Aop 数据库事务控制注解版

直接注解通知顺序不一样,?好像是前置,最终,返回,不是很明白。使用环绕通知自己定义通知顺序,不想探究了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package com.itheima.utils;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
* 和事务管理相关的工具类,它包含了,开启事务,提交事务,回滚事务和释放连接
*/
@Component("txManger")
@Aspect
public class TransactionManager {
@Autowired
private ConnectionUtils connectionUtils;
@Pointcut("execution(* com.itheima.service.impl.*.*(..) )")
private void pt1(){

}
/**
* 开启事务
*/
@Around("pt1()")
public Object aroundAdvice(ProceedingJoinPoint pjp){
Object trValue=null;
try {
Object[] args = pjp.getArgs();
this.beginTransaction();

trValue= pjp.proceed(args);
this.commit();
return trValue;
}
catch (Throwable e){
this.rollback();
throw new RuntimeException(e);
}finally {
this.release();
}
}

public void beginTransaction(){
try {
connectionUtils.getThreadConnection().setAutoCommit(false);
}catch (Exception e){
e.printStackTrace();
}
}

/**
* 提交事务
*/

public void commit(){
try {
connectionUtils.getThreadConnection().commit();
}catch (Exception e){
e.printStackTrace();
}
}

/**
* 回滚事务
*/

public void rollback(){
try {
connectionUtils.getThreadConnection().rollback();
}catch (Exception e){
e.printStackTrace();
}
}


/**
* 释放连接
*/

public void release(){
try {
connectionUtils.getThreadConnection().close();//还回连接池中
connectionUtils.removeConnection();
}catch (Exception e){
e.printStackTrace();
}
}
}


Aop 数据库事务控制注解版
https://lililib.github.io/Aop 数据库事务控制注解版/
作者
煨酒小童
发布于
2022年4月18日
许可协议