AOP配置(注解)

AOP配置(注解)

基本的注解配置

@Aspect

  • 位置:类定义上方
  • 作用:设置当前类为切面类

@Pointcut

  • 位置:方法定义上方
  • 作用:使用**当前的方法名**作为切入点引用名称
@Pointcut("execution(* *..*(..))")
public void pt(){ }
  • 可以写在独立类中
public class AOPPointcut{
    @Pointcut("execution(* *..*(..))")
    public void pt1(){
    }
}

@Before

  • 位置:方法定义上方
  • 作用:标注该方法作为前置通知
@Before("AOPPointcut.pt1()")
public void before(JoinPoint jp){
    Object[] args = jp.getArgs();
    System.out.println("前置...before ..." + args[0] + args[1]);
}

@After

  • 位置:方法定义上方
  • 作用:标注该方法作为后置通知
@After("AOPPointcut.pt1()")
public void after(){
    System.out.println("后置...after ...");
}

@AfterReturning

  • 位置:方法定义上方
  • 作用:标注该方法作为返回后通知
@AfterReturning("AOPPointcut.pt1()")
public void afterReturing(){
    System.out.println("返回后...afterReturing ...");
}

@AfterThrowing

  • 位置:方法定义上方
  • 作用:标注该方法作为异常后通知
@AfterThrowing("AOPPointcut.pt1()")
public void afterThrowing(){
    System.out.println("抛出异常后...afterThrowing ...");
}

@Around

  • 位置:方法定义上方
  • 作用:标注该方法作为环绕通知
@Around("AOPPointcut.pt1()")
public Object around(ProceedingJoinPoint pjp){
    System.out.println("环绕前...around ... before");
    //对原始方法的调用
    Object ret = null;
    try {
        ret = pjp.proceed();
    } catch (Throwable throwable) {
        System.out.println("环绕抛原方法异常...around... exception..." + throwable.getMessage());
    }
    System.out.println("环绕后...around ... after" + ret);
    return ret;
}

注解后添加参数

注解配置:

@AfterReturning(value = "AOPPointcut.pt1()",returning = "ret")
public void afterReturing(Object ret){
    System.out.println("返回后...afterReturing ..." + ret);
}
@AfterThrowing(value = "AOPPointcut.pt1()", throwing = "t")
public void afterThrowing(Throwable t){
    System.out.println("抛出异常后...afterThrowing ..." + t.getMessage());
}

XML配置:

<aop:config>
    <aop:pointcut id="pt" expression="execution(* *..*(..))"/>
    <aop:aspect ref="myAdvice">
        <aop:after-returning method="afterReturing" pointcut-ref="pt" returning="ret"/>
        <aop:after-throwing method="afterThrowing" pointcut-ref="pt" throwing="t"/>
    </aop:aspect>
</aop:config>

AOP注解开发通知执行顺序控制

Spring AOP运行机制

  • 同个通知类中,相同通知类型以方法名排序为准
  • 不同通知类中,以类名排序为准
  • 使用@Order()注解通过变更bean的加载顺序改变通知的加载顺序
@Before("AOPPointcut.pt1()")
public void aop002log(){
    System.out.println("前置...before2 ..." );
}

@Before("AOPPointcut.pt1()")
public void aop003log(){
    System.out.println("前置...before1 ..." );
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Timber.Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值