环绕通知异常抛出疑问

环绕通知异常抛出疑问

老师,请问环绕通知这个方法抛出的异常最终是谁处理的?它作为一个切面,我们也不会手动去调用啊。什么类型的异常我们才需要向外抛出呢?


package com.imooc.spring.aop.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MethodChecker {
    ////ProceedingJoinPoint是JoinPoint的升级版,在原有功能外,还可以控制目标方法是否执行
    public Object check(ProceedingJoinPoint pjp) throws Throwable {
        try {
            long startTime = new Date().getTime();
            Object ret = pjp.proceed();//执行目标方法,它有个返回值就是目标方法的返回值
            long endTime = new Date().getTime();
            long duration = endTime - startTime; //执行时长
            if(duration >= 1000){
                String className = pjp.getTarget().getClass().getName();
                String methodName = pjp.getSignature().getName();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
                String now = sdf.format(new Date());
                System.out.println("=======" + now + ":" + className + "." + methodName + "(" + duration + "ms)======");
            }
            return ret;
        } catch (Throwable throwable) {
            System.out.println("Exception message:" + throwable.getMessage());
            throw throwable;
        }
    }
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小脸 2023-01-19 10:06:32

同学你好,

1、异常通过 throws 向上抛出时会由调用者进行处理

2、一般情况下,可能出现异常的地方都会提示抛出异常,具体情况还需结合具体结合具体业务代码决定

当本方法中异常无法处理,或者不想处理,或者不适合处理,可以通过throws将异常实例抛出给上层调用者,由上层调用者来处理。
祝学习愉快~


  • 提问者 小白0719 #1

    能不能理解为:异常都应该向外抛出由控制层来处理,在内部处理会导致控制层就获取不到异常信息,无法正确响应?

    2023-01-19 10:29:33
  • 好帮手慕小脸 回复 提问者 小白0719 #2

    同学你好,说法过于绝对,并不存在应该向外抛出,这需要结合代码实际情况进行决定,有时也是可以使用try..catch进行异常的处理等

    祝学习愉快~

    2023-01-19 13:29:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师