1. 目录
[TOC]
2. 说明
异常解析器在发生异常的时候解析组装异常返回
3. 依赖分析
4. 源码分析
初始化异常解析器依然是在DispatchServlet#initStrategies()
中完成的,方法为initHandlerExceptionResolvers()
4.1. initHandlerExceptionResolvers()
和前面一样,当配置<mvc:annotation-driven>
的时候会加载默认,没有配置注解驱动,查询出来为空, 则会走后面getDefaultStrategies()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| private void initHandlerExceptionResolvers(ApplicationContext context) { this.handlerExceptionResolvers = null;
if (this.detectAllHandlerExceptionResolvers) { Map<String, HandlerExceptionResolver> matchingBeans = BeanFactoryUtils .beansOfTypeIncludingAncestors(context, HandlerExceptionResolver.class, true, false); if (!matchingBeans.isEmpty()) { this.handlerExceptionResolvers = new ArrayList<>(matchingBeans.values()); AnnotationAwareOrderComparator.sort(this.handlerExceptionResolvers); } } else { try { HandlerExceptionResolver her = context.getBean(HANDLER_EXCEPTION_RESOLVER_BEAN_NAME, HandlerExceptionResolver.class); this.handlerExceptionResolvers = Collections.singletonList(her); } catch (NoSuchBeanDefinitionException ex) { } }
if (this.handlerExceptionResolvers == null) { this.handlerExceptionResolvers = getDefaultStrategies(context, HandlerExceptionResolver.class); if (logger.isTraceEnabled()) { logger.trace("No HandlerExceptionResolvers declared in servlet '" + getServletName() + "': using default strategies from DispatcherServlet.properties"); } } }
|
5. 总结
6. 注意事项