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是自定义的应答类型,用其他也可以
...
}

编程小白入门分享三:Spring AOP统一异常处理的更多相关文章

  1. Spring AOP统一异常处理

    1.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  2. 编程小白入门分享五:Vue的自定义组件

    前言 上篇博客简单介绍了vue,本篇博客要在对vue有一定了解后,才可以比较容易理解自定义组件.想要封装好一个组件,一定要熟练掌握这三个技能,父组件 -> 子组件传值(props).子组件 -& ...

  3. 编程小白入门分享四:Vue的安装及使用快速入门

    一.VUE简介 vue是一个JavaMVVM库,是一套用于构建用户界面的渐进式框架,是初创项目的首选前端框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计.它是轻量级的,它有很多独立 ...

  4. 编程小白入门分享一:git的最基本使用

    git简介 引用了网上的一张图,这张图清晰表达git的架构.workspace是工作区,可以用编辑器直接编辑其中的文件:Index/Stage是暂存区,编辑后的文件可以添加到(add)暂存区:Repo ...

  5. 编程小白入门分享二:IntelliJ IDEA的入门操作小知识

    idea简介 IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支 ...

  6. SpringBoot入门系列(十一)统一异常处理的实现

    前面介绍了Spring Boot 如何整合定时任务已经Spring Boot 如何创建异步任务和定时任务.不清楚的朋友可以看看之前的文章:<Spring Boot 入门系列文章> 接下来主 ...

  7. Spring MVC 统一异常处理

    Spring MVC 统一异常处理 看到 Exception 这个单词都心慌 如果有一天你发现好久没有看到Exception这个单词了,那你会不会想念她?我是不会的.她如女孩一样的令人心动又心慌,又或 ...

  8. Spring入门(三)— AOP注解、jdbc模板、事务

    一.AOP注解开发 导入jar包 aop联盟包. aspectJ实现包 . spring-aop-xxx.jar . spring-aspect-xxx.jar 导入约束 aop约束 托管扩展类和被扩 ...

  9. Spring入门(十):Spring AOP使用讲解

    1. 什么是AOP? AOP是Aspect Oriented Programming的缩写,意思是:面向切面编程,它是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 可以认为AOP是 ...

随机推荐

  1. java:字符串的split方法,使用多个分隔符,分割一个字符串

    java语言中,多个分隔符,分割一个字符串: String[] tmpAuthors=tempAuthorStr.split(";|,|:|,"); 可以在线测试:java代码 在 ...

  2. 【jquery】【jqGrid】设置不能多选

    onSelectAll:function(rowids,statue){ layui.layer.msg("请选择单条记录"); $("#jqGrid").jq ...

  3. understanding backpropagation

    几个有助于加深对反向传播算法直观理解的网页,包括普通前向神经网络,卷积神经网络以及利用BP对一般性函数求导 A Visual Explanation of the Back Propagation A ...

  4. day17——序列化、os、sys、hashlib、collections

    day17 序列化 json 两组4个方法: 1.dumps(序列化) -- loads(反序列) dumps(list):将对象转换成字符串 loads(str):将字符串转换成对象 list--s ...

  5. (十二)一个简单的pdf文件体

    %PDF-1.0                     % 文件头,说明符合PDF1.0规范 1 0 obj                          %对象号     产生号(修改次数)  ...

  6. js 不同浏览器的类型判断 navigator.userAgent

    一.通过navigator.userAgent来进行浏览器类型判断 // 判断浏览器内核.手机系统等,使用 browser.userAgent.mobile var browser = { userA ...

  7. Vue 项目 VSCode 调试

    调试Vue搭建的前端项目 在项目根目录下的vue.config.js中添加: module.exports = { lintOnSave: false, //关闭eslint语法校验 //填写这部分 ...

  8. 利用nfs-client-provisioner动态提供Kubernetes后端存储卷

    原文:https://www.kubernetes.org.cn/3894.html 利用NFS client provisioner动态提供Kubernetes后端存储卷 本文翻译自nfs-clie ...

  9. Python进阶(十一)----包,logging模块

    Python进阶(十一)----包,logging模块 一丶包的使用 什么是包: ​ 包是通过使用 .模块名的方式组织python模块名称空间的方式. 通俗来说,含有一个__init__.py文件的文 ...

  10. 没有15k薪资都不会了解的测试内幕

    软件测试的工程师阶层是指随着行业的飞速发展,测试人员犹如身在洪流之中“逆水行舟不进则退”.知其然已经无法满足当今的测试人员,还要知其所以然.所以测试人员不仅仅要关注系统外部结构,还得了解系统内部的逻辑 ...