注解实现aop事务

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");

    }
}

猜你喜欢

转载自blog.csdn.net/qq_35418518/article/details/89069212