# 《Spring核心技术》第52章-增强控制器方法:深度解析@ExceptionHandler注解
作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码地址:https://github.com/binghe001/spring-annotation-book/tree/master/spring-annotation-chapter-52 (opens new window)
沉淀,成长,突破,帮助他人,成就自我。
大家好,我是冰河~~
本章难度:★★★★☆
本章重点:进一步学习并掌握@ExceptionHandler注解捕获异常的案例和流程,从源码级别彻底掌握@ExceptionHandler注解在Spring底层的执行流程。
本章目录如下所示:
- 学习指引
- 注解说明
- 注解源码
- 使用场景
- 使用案例
- 源码时序图
- 获取参数
- 调用控制器方法
- 捕获异常
- 源码解析
- 获取参数
- 调用控制器方法
- 捕获异常
- 总结
- 思考
- VIP服务
# 一、学习指引
Spring中的@ExceptionHandler注解,你真的彻底了解过吗?
在基于SpringMVC或者SpringBoot开发Web应用时,往往需要在程序中处理很多的异常情况,如果在程序中大量使用try-catch代码块来捕获异常则显得代码比较杂乱。即使在程序中使用了大量的try-catch代码块来捕获异常,也难免会存在未捕获的异常,一旦在生产环境中触发了这些未捕获的异常,可能会造成意想不到的后果。那有什么办法来统一捕获和处理这些异常吗?
# 二、注解说明
关于@ExceptionHandler注解的一点点说明~~
@ExceptionHandler注解能够统一捕获并处理异常,在@ExceptionHandler标注的方法中可以同一捕获异常,根据具体情况向客户端程序提示具体的友好异常信息。
# 2.1 注解源码
@ExceptionHandler注解的源码详见:org.springframework.web.bind.annotation.ExceptionHandler。
/**
* @author Arjen Poutsma
* @author Juergen Hoeller
* @since 3.0
* @see ControllerAdvice
* @see org.springframework.web.context.request.WebRequest
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Reflective(ExceptionHandlerReflectiveProcessor.class)
public @interface ExceptionHandler {
Class<? extends Throwable>[] value() default {};
}
2
3
4
5
6
7
8
9
10
11
12
13
14
从源码可以看出,@ExceptionHandler注解是从Spring3.0版本开始提供的注解,只能标注到方法上,并且在@ExceptionHandler注解中提供了如下属性信息。
- value:Class数组类型的属性,主要是用于指定捕获的异常类型。
# 2.2 使用场景
如果在基于SpringMVC或者SpringBoot开发应用程序时,想统一捕获并处理异常信息,就可以使用@ExceptionHandler注解实现。
# 查看完整文章
加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码