普通切面增强,和事务这个切面的执行顺序
时间: 2023-08-18 07:51:26 浏览: 82
Spring自定义切面事务问题
在Spring AOP中,切面类可以定义多个增强方法,包括Before、Around、AfterReturning、AfterThrowing等。这些增强方法的执行顺序是由通知类型和切点位置共同决定的。
对于普通切面增强,它的执行顺序是:
1. Before增强方法;
2. 目标方法;
3. AfterReturning增强方法或AfterThrowing增强方法(如果目标方法正常返回,则执行AfterReturning增强方法,否则执行AfterThrowing增强方法);
4. After增强方法。
而对于事务这个切面的执行顺序,则是:
1. Transactional增强方法(Around通知类型);
2. Before增强方法;
3. 目标方法;
4. AfterReturning增强方法或AfterThrowing增强方法(如果目标方法正常返回,则执行AfterReturning增强方法,否则执行AfterThrowing增强方法);
5. After增强方法。
可以看到,在事务切面中,Transactional增强方法会优先于Before增强方法执行。这是因为事务切面需要先开启事务,然后才能执行目标方法和其他增强方法,最后再提交或回滚事务。因此,在事务切面中,Transactional增强方法的执行顺序非常重要,必须保证它是最先执行的。
阅读全文