Spring 异常处理器 源码分析总结
来源:互联网 发布:阿里卖家版是什么软件 编辑:程序博客网 时间:2024/06/16 10:20
异常处理的作用
可以拦截制定异常,并进行处理返回到制定页面。
需求举例
如我的需求当用户请求不存的页面时不能出现浏览器默认的404页面,而出现我自己定义的html也面。当出现A类异常时返回到a.html。出现B类异常返回带b.html。
项目实例
例如:当为我根本没有ind123ex.html服务请求时。
如果我不自定义错误处理器。返回404页面
当自定义错误处理器,处理NoHandlerFoundException(404的异常)异常后返回制定的请求页面。当然你也可以拦截自定义的异常,返回到不同的页面。
以下部分对Spring异常处理器执行和加载源码进行分析
1、DispatcherServlet这个前端配置器中初始化的策略对象如下图
2、initHandlerExceptionResolvers为初始化异常处理类。
可以看到初始化异常处理集合是通过类型从上下文获取。并且通过sort对异常处理器集合排序。
排序的作用: 当发生异常时,根据异常处理器的顺序来处理异常,当有异常处理其能够处理当前异常信息时,就不再执行后面的异常处理器了。
3、异常处理信息排序 根据对象的 Order属性进行排序,如果不是Order对象类那么排序就靠后。
4、执行异常处理,可以看到当发生异常时候,按顺序执行异常处理器(this.handlerExceptionResolvers)。当有异常处理器能够处理当前一场(exMv != null)。则后面的异常处理器都不会执行。
5、默认异常顺序设置:
源代码在org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser
类注释说明
可以看到<annotation-driven/> 自动加载的异常处理 ,默认加载三个分别是(ExceptionHandlerExceptionResolver、ResponseStatusExceptionResolver、DefaultHandlerExceptionResolver)。
6、加载源代码分析。
在org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser 类中有分别加载上面三个异常处理器的代码如下。
①、ExceptionHandlerExceptionResolver
②、ResponseStatusExceptionResolver
③、DefaultHandlerExceptionResolver
可以看到三个异常加载器的Order分别为(0,1,2)。
6、自定义异常处理器
(继承AbstractHandlerExceptionResolver【可设置顺序】或者HandlerExceptionResolver【不能设置顺序】)以及设置异常处理类的执行顺序
7、如果考虑自定异常处理器比默认异常处理器的优先级高。那么一定要考虑设置 Order。
如果有什么错误的地方, 欢迎大家多多指正。
1 0
- Spring 异常处理器 源码分析总结
- Spring中的异常处理器
- Spring自定义全局异常处理器
- spring 源码分析及知识点总结
- spring mvc配置全局异常处理器
- Spring EmptyResultDataAccessException异常的源码分析和解决方法
- muduo源码分析之事件处理器-Channel
- 总结Spring中工厂后处理器
- spring+mybatis启动NoClassDefFoundError异常分析三部曲之三:改spring源码,取详细错误
- 深入剖析Spring Web源码(十一) - 处理器映射,处理器适配器以及处理器的实现 - 处理器映射的实现架构
- 深入剖析Spring Web源码(十二) - 处理器映射,处理器适配器以及处理器的实现 - 处理器适配器的实现架构
- 深入剖析Spring Web源码(十一) - 处理器映射,处理器适配器以及处理器的实现 - 处理器映射的实现架构
- JAVA异常分析总结
- 企业实战之spring增强器实现《全局异常处理器》
- ARM处理器异常处理的返回地址分析
- Spring 源码分析:ApplicationContext
- Spring 源码分析:ApplicationContext- -
- [转贴] Spring源码分析
- ssoj2467树(状压dp)
- 配置SWT Java开发环境
- SQL Server 2008 数据库编程摘要三 :锁篇
- date_time boost
- 欢迎使用CSDN-markdown编辑器
- Spring 异常处理器 源码分析总结
- photoshop自动对比度,自动色阶,自动颜色区别
- java static关键字
- 最短路
- Facebook SDK接入备注
- 最新ShareSdk简洁版集成注意事项(IOS)
- 堆
- SQL Server 2008 数据库编程摘要四 :游标篇
- wpf 多线程操作实例