ExceptionHandlerExceptionResolver类源码解析

一. ExceptionHandlerExceptionResolver异常处理过程

先从入口着手,如下图:

整体逻辑很明显:1. 判断是否匹配这个异常处理,如果不匹配则直接返回null;否则进行第二步;2. 预先处理响应(基本是添加响应头等处理,具体可以看方法体),接着进入第三步;3. 这个就是核心的异常处理逻辑方法体;

现在先看shouldApplyTo方法体的实现,主要是判断是否匹配handler,如下图:

接着看着prepareResponse方法体,然而里面没有多余处理逻辑,先忽略;

现在进去查看doResolveException方法体,最终进入如下图的方法体;

整体逻辑是获取ServletInvocableHandlerMethod实例,然后交由其去处理该异常()ServletInvocableHandlerMethod的处理逻辑后续通过DispatcherServlet处理请求来进行说明),现在主要去了解获取ServletInvocableHandlerMethod实例的处理过程;

整体逻辑是:1. 解析Handler类是否有ExceptionHandler注解标注的方法以及参数中是否有异常对象;接着判断抛出来的异常是否匹配,如果匹配则直接返回该方法去处理异常(说明handler实例中异常处理方法优先于ControllerAdiveBean中异常处理);2. 通过ControllerAdive注解标注的实例去匹配异常以及异常处理,匹配逻辑以及异常处理跟第一步相似;

所以,异常处理类来处理handler异常,要不就handler类中的异常处理,要不就是ControllerAdive的类来进行异常处理;

二. ExceptionHandlerExceptionResolver.exceptionHandlerAdviceCache的初始化过程

通过AfterProperties方法进行处理,如下图:

所以,通过ControllerAdive注解以及方法中的ExceptionHandler注解来指示该类中的方法去处理异常;

三. ExceptionHandlerMethodResolver构造过程解析

ControllerAdive注解以及ExceptionHandler注解的联合使用,来指明异常处理方法;

后续,简单实现ControllerAdive注解标注的类来进行异常处理;

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值