Spring Aop切面类优先级@Order()

文章讨论了在SpringAOP中,如何通过@Order注解控制相同目标方法上的多个切面的执行顺序,优先级高的切面在外部,较低的在内部。示例展示了如何在前置、后置和环绕通知中使用@Order来管理事务操作。

相同目标方法上同时存在多个切面时,切面的优先级控制切面的内外嵌套顺序。

优先级高的切面:外面

优先级低的切面:里面

使用 @Order 注解可以控制切面的优先级:

@Order(较小的数):优先级高

@Order(较大的数):优先级低

注:@Order默认值为int类型的最大值

@Component  //当前类交由ioc管理
@Aspect     //开启aspect注解支持
@Order(1)  //指定一个优先级的值,值越小,优先级越高!越高的前置先执行,后置后执行
public class LogAdvice {

    /*
    @Pointcut("execution(* com.suchuanlin.service.impl.*.*(..))")
    public void pointcut(){}
    */

    @Before("com.suchuanlin.pointcut.MyPointCut.pointcut()")
    public void before(){
        System.out.println("方法开始了...");
    }

    @After("com.suchuanlin.pointcut.MyPointCut.pointcut()")
    public void after(){
        System.out.println("方法结束了...");
    }

    @AfterThrowing("com.suchuanlin.pointcut.MyPointCut.pointcut()")
    public void error(){
        System.out.println("方法报错了...");
    }
}
package com.suchuanlin.advice;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
 * 环绕通知
 */
@Component //加入ioc容器
@Aspect  //标记为切面
@Order(2)  //指定一个优先级的值,值越小,优先级越高!越高的前置先执行,后置后执行
public class AroundAdvice {

    @Before("com.suchuanlin.pointcut.MyPointCut.pointcut()")
    public void begin(){
        System.out.println("开启事务...");
    }

    @AfterReturning("com.suchuanlin.pointcut.MyPointCut.pointcut()")
    public void commit(){
        System.out.println("提交事务...");
    }

    @AfterThrowing("com.suchuanlin.pointcut.MyPointCut.pointcut()")
    public void rollback(){
        System.out.println("回滚事务...");
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值