Spring框架----Spring的环绕通知

38 篇文章 1 订阅
23 篇文章 2 订阅

问题:当我们配置了环绕通知之后,切入点方法没有执行,而通知方法执行了

/*环绕通知
* 问题:当我们配置了环绕通知之后,切入点方法没有执行,而通知方法执行了
* */
public void aroundPrintLog(){
    System.out.println("(环绕通知)Logger类中的aroundPrintLog方法开始记录日志了");
}
<!--配置环绕通知 详细的注释请看logger类中-->
<aop:around method="aroundPrintLog" pointcut-ref="pt1"></aop:around>

在这里插入图片描述
问题:当我们配置了环绕通知之后,切入点方法没有执行,而通知方法执行了
之前的动态代理中整个invoke里面的所有内容都称为环绕通知。它有明确的切入点调用,而我们这个没有
分析:通过对比动态代理中的环绕通知代码,发现动态代理中的环绕通知有明确的切入点方法调用,而我们的代码中没有。
解决:spring框架为我们提供了一个接口,ProceedingJoinPoint。该接口有一个方法proceed().此方法就相当于明确调用明确调用切入点方法。该接口可以作为环绕通知的方法参数,在程序执行时,spring框架会为我们提供该接口的实现类供我们使用
spring的环绕通知:它是spring框架为我们提供的一种可以在代码中手动控制增强代码何时执行的方式

public Object aroundPrintLog(ProceedingJoinPoint pjp){
    Object rtValue=null;
    try{
        Object[] args=pjp.getArgs();        //得到方法执行所需的参数
        System.out.println("(前置通知)Logger类中的beforePrintLog方法开始记录日志了");
        rtValue=pjp.proceed();      //明确调用业务层方法(切入点方法)
        System.out.println("(后置通知)Logger类中的afterReturningPrintLog方法开始记录日志了");
        return rtValue;
    }catch(Throwable t){        //这里要写Throwable,Exception拦不住它
        System.out.println("(异常通知)Logger类中的afterThrowingPrintLog方法开始记录日志了");
        throw new RuntimeException();
    }finally{
        System.out.println("(最终通知)Logger类中的afterPrintLog方法开始记录日志了");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值