事务框架之声明事务(自动开启,自动提交,自动回滚)Spring AOP 封装
利用Spring AOP 封装事务类,自己的在方法前begin 事务,完成后提交事务,有异常回滚事务
比起之前的编程式事务,AOP将事务的开启与提交写在了环绕通知里面,回滚写在异常通知里面,找到指定的方法(切入点),代码如下:
代码在这个基础上重构:
https://www.cnblogs.com/pickKnow/p/11135310.html
@Component @Aspect
@Scope("prototype") public class AopTransaction { @Autowired private TransactionUtils transactionUtils; @Around("execution (* com.hella.thread.aoptransaction.service.UserService.addUser(..) )") public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { //不要try catch 不然回滚不了,一直占用资源 System.out.println("开启事务"); TransactionStatus transactionStatus = transactionUtils.begin(); proceedingJoinPoint.proceed(); transactionUtils.commit(transactionStatus); System.out.println("提交事务"); } @AfterThrowing("execution (* com.hella.thread.aoptransaction.service.UserService.addUser(..) )") public void afterThrowing() { System.out.println("事务开始回滚"); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } }
那service 层方法里面就不需要再写事务的开启,提交,回滚了。
@Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public void addUser() { // 添加到数据库 System.out.println("开始添加"); userDao.add(1, "tom", "12"); } }
Aimer,c'est partager