前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA全局异常捕获机制

JAVA全局异常捕获机制

原创
作者头像
疯狂的KK
发布2024-01-29 14:16:28
2210
发布2024-01-29 14:16:28
举报
文章被收录于专栏:Java项目实战Java项目实战

在开发Java应用程序时,异常处理显得尤为重要。只有正确处理所有可能出现的异常,才能确保应用的健壮性和稳定性。传统上,我们会在每个可能抛出异常的方法中使用try-catch捕获异常,这当然可以解决问题,但代码冗长且难以维护。相比之下,使用AOP(Aspect Oriented Programming)来实现全局异常捕获会更加优雅高效。

Java异常基础

在Java中,所有异常都继承于Throwable类。主要分为两大类:Checked Exception和Unchecked Exception。

  • Checked Exception:编译时即可检查到的异常,如IOException。必须用try-catch捕获或在方法声明上抛出。
  • Unchecked Exception:运行时异常,如NullPointerException。不需要捕获也可编译通过。

除此之外,Error并不是一个Exception,表示严重问题无法进行恢复。

传统方式-方法内catch

我们可以在每个可能抛出异常的方法内用try-catch来捕获:

代码语言:java
复制
public void method() {
  try {
    // code 
  } catch (Exception e) {
    // handle exception
  }
}

这种方式容易产生大量重复代码,维护复杂。如果忘记添加catch也会导致部分异常无法处理。

AOP实现全局捕获

AOP思想是将公共功能从主线业务中分离出来形成一个独立模块。我们可以用AOP框架如Spring AOP或AspectJ实现全局异常捕获:

代码语言:java
复制
@Aspect
public class GlobalExceptionHandler {

  @AfterThrowing(value = "execution(* com.example.service.*.*(..))", throwing="ex")
  public void handleException(Exception ex) {
    // 统一处理所有服务层抛出的异常
  }

}

实战技巧

除捕获异常,我们还可以返回一个友好的错误码:

代码语言:java
复制
@AfterThrowing(value = "execution(* com.example.controller.*.*(..))", throwing="ex")
public ResponseEntity handleControllerException(Exception ex) {
  return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
    .body(Result.fail("10000", ex.getMessage()));
}

同时,记录到日志中有助于问题排查:

代码语言:java
复制
@AfterThrowing(value = "execution(* com.example..*(..))", throwing="ex")
public void logException(Exception ex) {
  logger.error("异常:{}", ex);
}

这样不论方法内部抛出什么异常,我们都可以实现统一处理。大大提高了应用的可靠性。

是不是很炫酷!请给个小红心支持一下。下次再聊更多AOP技巧。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java异常基础
  • 传统方式-方法内catch
  • AOP实现全局捕获
  • 实战技巧
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com