如何实现替代try catch的异常处理,更优雅高效?

2026-05-27 21:210阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2566个文字,预计阅读时间需要11分钟。

如何实现替代try catch的异常处理,更优雅高效?

前言+软件开发过程中,不可避免的是需要处理各种异常。我就自己来说,至少有一半以上的时间都在处理各种异常情况,所以在代码中就会大量出现try...catch...finally...结构。

前言

软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的​​try {…} catch {…} finally {…}​​代码块,不仅有大量的冗余代码,而且还影响代码的可读性。

一、什么是统一异常处理?

Spring在3.2版本增加了一个注解​​@ControllerAdvice​​,可以与​​@ExceptionHandler​​、​​@InitBinder​​、​​@ModelAttribute​​等注解注解配套使用。

不过跟异常处理相关的只有注解​​@ExceptionHandler​​,从字面上看,就是 异常处理器 的意思,其实际作用也是:若在某个Controller类定义一个异常处理方法,并在方法上添加该注解,那么当出现指定的异常时,会执行该处理异常的方法,其可以使用springmvc提供的数据绑定,比如注入​​HttpServletRequest​​等,还可以接受一个当前抛出的Throwable对象。

但是,这样一来,就必须在每一个Controller类都定义一套这样的异常处理方法,因为异常可以是各种各样。这样一来,就会造成大量的冗余代码,而且若需要新增一种异常的处理逻辑,就必须修改所有Controller类了,很不优雅。也可以定义个类似​​BaseController​​的基类,这种做法虽然没错,但因为这样的代码有一定的侵入性和耦合性,万一已经继承其他基类了呢。

阅读全文

本文共计2566个文字,预计阅读时间需要11分钟。

如何实现替代try catch的异常处理,更优雅高效?

前言+软件开发过程中,不可避免的是需要处理各种异常。我就自己来说,至少有一半以上的时间都在处理各种异常情况,所以在代码中就会大量出现try...catch...finally...结构。

前言

软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的​​try {…} catch {…} finally {…}​​代码块,不仅有大量的冗余代码,而且还影响代码的可读性。

一、什么是统一异常处理?

Spring在3.2版本增加了一个注解​​@ControllerAdvice​​,可以与​​@ExceptionHandler​​、​​@InitBinder​​、​​@ModelAttribute​​等注解注解配套使用。

不过跟异常处理相关的只有注解​​@ExceptionHandler​​,从字面上看,就是 异常处理器 的意思,其实际作用也是:若在某个Controller类定义一个异常处理方法,并在方法上添加该注解,那么当出现指定的异常时,会执行该处理异常的方法,其可以使用springmvc提供的数据绑定,比如注入​​HttpServletRequest​​等,还可以接受一个当前抛出的Throwable对象。

但是,这样一来,就必须在每一个Controller类都定义一套这样的异常处理方法,因为异常可以是各种各样。这样一来,就会造成大量的冗余代码,而且若需要新增一种异常的处理逻辑,就必须修改所有Controller类了,很不优雅。也可以定义个类似​​BaseController​​的基类,这种做法虽然没错,但因为这样的代码有一定的侵入性和耦合性,万一已经继承其他基类了呢。

阅读全文