事务框架之声明事务(自动开启,自动提交,自动回滚)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");
    }
}

 

posted @ 2019-07-05 14:27  Chris,Cai  阅读(1590)  评论(0编辑  收藏  举报