Spring AOP统一异常处理

简介


在Controller层,Service层,可能会有很多的try catch代码块。这将会严重影响代码的可读性、“美观性”。怎样才可以把更多的精力放在业务代码的开发,同时代码变得更加简洁?既然业务代码不显式地对异常进行捕获、处理,而异常肯定还是处理的,不然系统岂不是动不动就崩溃了,所以必须得有其他地方捕获并处理这些异常。统一异常处理应运而生,优雅的处理各种异常。本文主要介绍的是用切面方式进行统一异常处理。

目录结构


接下来逐一介绍作用

annotation包


这个包写一个注解的接口,定义全局异常注解,就是最后打在需要异常处理的方法上的注解

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface GlobalExceptionLog {
Class<? extends Throwable>[] value() default {};
}

aspect包


定义处理上述注解的切面

@Component
@Aspect
public class GlobalExceptionAspect {
@Resource
private GlobalExceptionHandler globalExceptionHandler;//全局异常处理 //定义执行这个切面的注解
@Pointcut("@annotation(com.bosssoft.bes.base.common.exception.logging.annotation.GlobalExceptionLog)")
public void myExceptionHandler() {
} //当抛出异常后执行的方法
@AfterThrowing(throwing = "ex",pointcut = "myExceptionHandler()")
public void afterThrowing(JoinPoint joinPoint,BaseException ex){
...
//全局异常处理
} }

enums包


定义枚举类,用于自定义异常

public enum ResultEnum {
SUCCESS(000000,"成功"),
SYSTEM_ERROR(100000,"系统错误"),
; private int code;
private String message; private ResultEnum(int code, String message){
this.code = code;
this.message = message;
} public int getCode() {
return code;
} public String getMsg() {
return message;
}
}

exception包


自定义异常类

public class BusinessException extends BaseException {
public BusinessException(ResultEnum resultEnum) {
super(resultEnum);
} public BusinessException(String message, int code) {
super(message, code);
}
}

handler包


全局异常处理

@ControllerAdvice//控制层增强
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public CommonResponse handle(Exception e){
//执行方法,CommonResponse是自定义的应答类型,用其他也可以
...
}

最新文章

  1. oracle数据库如何创建表空间,临时表空间
  2. 用clock()函数计算多项式的运行时间
  3. javascript里面foreach遍历函数介绍,以及跟jquery里面each的区别
  4. Android Studio-开启Preview视图
  5. 工作组环境下管理windows.
  6. UITableView中的(NSIndexPath *)indexPath
  7. Anroid之Intent的使用
  8. laravel5的坑
  9. oracle单行函数之通用函数
  10. MapReduce 规划 六系列 MultipleOutputs采用
  11. MPI编程简述
  12. CSS border-radius 圆角
  13. 2019-04-18 Beetl模板学习
  14. hdu5965扫雷 枚举+递推
  15. Luogu P4070 [SDOI2016]生成魔咒
  16. JDK 升级问题小结
  17. ROS分布式控制的节点配置
  18. VCL界面控件DevExpress VCL发布v18.2.2|附下载
  19. CO文件升级
  20. tomcat站点配置

热门文章

  1. Python键盘按键模拟
  2. java实现视频转码
  3. 【转载】嵌入式 Linux 移植 Dropbear SSH server
  4. 卓金武《MATLAB在数学建模中的应用》 第2版
  5. Idea Spring 、SpringBoot相关设置技巧
  6. [Windows] - 在 Windows Server 2019 找不到无线网卡 之解决
  7. Spark学习(2) RDD编程
  8. MySQL表关系--外键
  9. pytest_使用自定义标记mark
  10. LOJ2001 SDOI2017 树点涂色 LCT、线段树