问题背景:
我要对某个方法进行统一处理,就比如这个方法如果报错了,返回响应固定的错误信息,并且错误信息存入数据库中。
如果对一个方法用了@Around,你就不需要用@AfterThrowing
因为proceed方法需要try catch,这时候就不需要@AfterThrowing进行异常的处理了,也不需要在切面方法内部以及切面方法调用的其他方法进行try catch了。
切面方法在方法上抛出异常,然后切面方法内部如果有一些if else的判断,进入某些判断中或者抛出异常的时候要入库,这时候在方法里就throw new exception(“XXX”),然后在@Around的方法里的catch统一进行入库,统一返回错误响应信息。
然后如果切面方法中又调了其他方法,那其他方法也都抛出异常,遇到其他方法中有try catch finally的,就在catch中抛出异常。(或者直接把try catch finally去掉,把finally的代码写在最下面应该就可以了。好像不太行,因为try中如果发生异常,好像就会导致一些连接不会关闭,发生内存泄漏。还是在catch中抛出异常吧。)
至于使用@ControllerAdvice和@ExceptionHandler,由于我想要返回响应固定的错误信息,这个信息是要获取一部分入参的。全局异常没法获得我切面方法的入参,所以没采用这种方法。