1.事务工具类
/**
* Created on 2019/4/6.
*
* @author Grak
* @since 1.0
*/
@Component
public class TransactionUtils {
@Autowired
private DataSourceTransactionManager dataSourceTransactionManager;
// 开启事务
public TransactionStatus begin() {
TransactionStatus transaction = dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());
return transaction;
}
// 提交事务
public void commit(TransactionStatus transactionStatus) {
dataSourceTransactionManager.commit(transactionStatus);
}
// 回滚事务
public void rollback(TransactionStatus transactionStatus) {
dataSourceTransactionManager.rollback(transactionStatus);
}
}
2、添加切面类
/**
* Created on 2019/4/6.
*
* @author Grak
* @since 1.0
*/
@Component
@Aspect
public class AopSpringAspect {
@Autowired
private TransactionUtils transactionUtils;
// // 异常通知
@AfterThrowing("execution(* com.stude.aop.aspect.jdbcaspect.DemoAspect.runAspect(..))")
public void afterThrowing() {
System.out.println("程序已经回滚");
// 获取程序当前事务 进行回滚
transactionUtils.rollback(TransactionAspectSupport.currentTransactionStatus());
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
// 环绕通知
@Around("execution(* com.stude.aop.aspect.jdbcaspect.DemoAspect.runAspect(..))")
public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("开启事务");
TransactionStatus begin = transactionUtils.begin();
proceedingJoinPoint.proceed();
transactionUtils.commit(begin);
System.out.println("提交事务");
}
}
3、被监听方法
/**
* Created on 2019/4/5.
*
* @author Grak
* @since 1.0
*/
@Component
public class User {
public void add(String message) {
System.out.println("执行User添加方法:" + message);
}
public void addNum(String message, int num) {
System.out.println("执行User添加方法:" + message + ",编号:" + num);
}
}
4、执行方法
@SpringBootApplication
public class AopApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(AopApplication.class, args);
//AopAspect执行
User myconf = (User) ctx.getBean("user");
myconf.add("test001");
}
}