spring全局异常拦截器怎么实现


这篇文章给大家分享的是有关spring全局异常拦截器怎么实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。你可能会问,Spring已经自带了全局异常拦截,为什么还要重复造轮子呢?这是个好问题,我觉得有以下几个原因装逼Spring的全局异常拦截只是针对于Spring MVC的接口,对于你的RPC接口就无能为力了无法定制化除了写业务代码,我们其实还能干点别的事我觉得上述理由已经比较充分的解答了为什么要重复造轮子,接下来就来看一下怎么造轮子造个什么样的轮子?我觉得全局异常拦截应该有如下特性使用方便,最好和spring原生的使用方式一致,降低学习成本能够支持所有接口调用异常处理器可预期,比如说定义了RuntimeException的处理器和Exception的处理器,如果这个时候抛出NullPointException,这时候要能没有歧义的选择预期的处理器如何造轮子?由于现在的应用基本上都是基于spring的,因此我也是基于SpringAop来实现全局异常拦截首先先定义几个注解@ExceptionAdvice 的作用是标志定义异常处理器的类,方便找免费云主机域名到异常处理器@ExceptionHandler 的作用是标记某个方法是处理异常的,里面的值是能够处理的异常类型@ExceptionIntercept 的作用是标记需要异常拦截的方法接下来定义统一返回格式,以便出现错误的时候统一返回然后定义一个收集异常处理器的类ExceptionMethod 里面有两个属性clazz:这个代表着能够处理的异常method:代表着处理异常调用的方法ExceptionMethodPool 里面按序存放所有异常处理器,excutor是执行这些异常处理器的对象接下来把所有定义的异常处理器收集起来ExceptionBeanPostProcessor 通过实现BeanPostProcessor 接口,在bean初始化之前,把所有异常处理器塞进 ExceptionMethodPool,并把其注册进Spring容器然后定义异常处理器这里应用了我自己通过函数式编程封装的一些语法糖,有兴趣的可以看下最后通过AOP进行拦截到这里代码部分就已经完成了,我们来看下如何使用我们通过@ExceptionAdvice标志定义异常处理器的类,然后通过@ExceptionHandler标注处理异常的方法,方便收集最后在需要异常拦截的方法上面通过@ExceptionIntercept进行异常拦截我没有使用Spring那种匹配最近父类的方式寻找匹配的异常处理器,我觉得这种设计是一个败笔,理由如下代码复杂不能一眼看出要去调用哪个异常处理器,尤其是定义的异常处理器非常多的时候,要是弄多个定义类就更不好找了,可能要把所有的处理器看完才知道应该调用哪个出于以上考虑,我只保留了一个异常处理器定义类,并且匹配顺序和方法定义顺序一致,从上到下依次匹配,这样只要找到一个能够处理的处理器,那么就知道了会如何调用感谢各位的阅读!关于“spring全局异常拦截器怎么实现”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

相关推荐: 怎么查看JavaScript变量的数据类型

这篇文章主要讲解了“怎么查看JavaScript变量的数据类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么查看JavaScript变量的数据类型”吧! typeof操作符 你可以使用typeof操作符来查…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/20 11:18
Next 08/20 11:19

相关推荐