天天看点

基于spring注解AOP的异常处理

  项目刚刚开发的时候,并没有做好充足的准备。开发到一定程度的时候才会想到还有一些问题没有解决。就比如今天我要说的一个问题:异常的处理。写程序的时候一般都会通过try...catch...finally对异常进行处理,但是我们真的能在写程序的时候处理掉所有可能发生的异常吗? 以及发生异常的时候执行什么逻辑,返回什么提示信息,跳转到什么页面,这些都是要考虑到的。

  @ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法应用到所有的 @RequestMapping注解的方法。本例子中使用ExceptionHandler应用到所有@RequestMapping注解的方法,处理发生的异常。

  示例代码:

  如果不起作用,请检查 spring-mvc的配置文件,是否有ControllerAdvice的如下配置

  1.处理controller层的异常 WebExceptionAspect.java

  2.处理service层的异常ServiceExceptionAspect .java

   3.使用方式,在spring的公共配置文件中加入如下配置:

  或者 自定义一个 注册类,ServiceExceptionAspect.java和WebExceptionAspect.java都加入@Component注解

   @within(org.springframework.stereotype.Service),拦截带有 @Service 注解的类的所有方法

   @annotation(org.springframework.web.bind.annotation.RequestMapping),拦截带有@RquestMapping的注解方法

  分别编写controller层和service层的异常测试类。这个很简单,在方法里简单的抛一下异常就可以了。最后验证一下,异常发生的时候有没有 执行 @AfterThrowing对应的方法就好了。具体还是看我写的demo吧,嘿嘿嘿!!!