编程小白入门分享三:Spring AOP统一异常处理
2024-08-30 05:06:28
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是自定义的应答类型,用其他也可以
...
}
最新文章
- oracle数据库如何创建表空间,临时表空间
- 用clock()函数计算多项式的运行时间
- javascript里面foreach遍历函数介绍,以及跟jquery里面each的区别
- Android Studio-开启Preview视图
- 工作组环境下管理windows.
- UITableView中的(NSIndexPath *)indexPath
- Anroid之Intent的使用
- laravel5的坑
- oracle单行函数之通用函数
- MapReduce 规划 六系列 MultipleOutputs采用
- MPI编程简述
- CSS border-radius 圆角
- 2019-04-18 Beetl模板学习
- hdu5965扫雷 枚举+递推
- Luogu P4070 [SDOI2016]生成魔咒
- JDK 升级问题小结
- ROS分布式控制的节点配置
- VCL界面控件DevExpress VCL发布v18.2.2|附下载
- CO文件升级
- tomcat站点配置