編程小白入門分享三:Spring AOP統一異常處理


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是自定義的應答類型,用其他也可以
        ...
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM