package com.atguigu.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Arrays;
@Component
@Aspect
public class DataSourceTransactionManagerTest {
@Autowired
private DataSource dataSource;
//将 service层的 public void checkOut(String username, String isbn,int number){} 作为目标方法
@Around(value = "execution(public void com.atguigu.service.BookService02.checkOut(..))")
public Object arrountMeshod(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
Object proceed = null;
Object[] args = proceedingJoinPoint.getArgs(); //获取目标方法的参数
Signature signature = proceedingJoinPoint.getSignature(); //获取目标方法的签名
String methodName = signature.getName(); //获取目标方法的名称
//前置通知
//获取连接
System.out.println("[前置通知],获取连接,设置事务非自动提交,执行方法:(" + methodName + ") + " + ",方法参数为:" + Arrays.asList(args));
Connection connection = dataSource.getConnection();
//设置 非自动提交事务
connection.setAutoCommit(false);
try {
//目标方法执行
proceed = proceedingJoinPoint.proceed();//相当于动态代理的 method.invoke(obj,args)
//返回通知
//提交事务
System.out.println("[返回通知],提交事务,执行方法:(" + methodName + ") + " + ",执行结果是:" + proceed);
connection.commit();
}catch (Exception e){
//异常通知
//回滚事务
System.out.println("[异常通知],回滚事务,异常信息:" + e);
connection.rollback();
}finally {
//后置通知
//释放连接
System.out.println("[后置通知],提交事务,执行方法:(" + methodName + ") + ");
connection.close();
}
return proceed;
}
}
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Arrays;
@Component
@Aspect
public class DataSourceTransactionManagerTest {
@Autowired
private DataSource dataSource;
//将 service层的 public void checkOut(String username, String isbn,int number){} 作为目标方法
@Around(value = "execution(public void com.atguigu.service.BookService02.checkOut(..))")
public Object arrountMeshod(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
Object proceed = null;
Object[] args = proceedingJoinPoint.getArgs(); //获取目标方法的参数
Signature signature = proceedingJoinPoint.getSignature(); //获取目标方法的签名
String methodName = signature.getName(); //获取目标方法的名称
//前置通知
//获取连接
System.out.println("[前置通知],获取连接,设置事务非自动提交,执行方法:(" + methodName + ") + " + ",方法参数为:" + Arrays.asList(args));
Connection connection = dataSource.getConnection();
//设置 非自动提交事务
connection.setAutoCommit(false);
try {
//目标方法执行
proceed = proceedingJoinPoint.proceed();//相当于动态代理的 method.invoke(obj,args)
//返回通知
//提交事务
System.out.println("[返回通知],提交事务,执行方法:(" + methodName + ") + " + ",执行结果是:" + proceed);
connection.commit();
}catch (Exception e){
//异常通知
//回滚事务
System.out.println("[异常通知],回滚事务,异常信息:" + e);
connection.rollback();
}finally {
//后置通知
//释放连接
System.out.println("[后置通知],提交事务,执行方法:(" + methodName + ") + ");
connection.close();
}
return proceed;
}
}