spring的異常處理
spring的異常處理,有兩種方式
1宪迟、實(shí)現(xiàn)HandlerExceptionResolver
實(shí)現(xiàn)自定義的ExceptionResolver酣衷,同時要注冊到spring 容器
2、@ExceptionHandler
2.1 和Controller在同一個類里
2.2 在控制器增強(qiáng)器里次泽,添加了@ControllerAdvice注解的類穿仪,會被注冊到spring 容器里,同時異常處理類意荤,會掃描這些增強(qiáng)器里是有帶@ExceptionHandler注解的方法
ExceptionHandler的value 指定要處理的異常類型啊片,如下是檢測異常類的方法,會掃描注解的值玖像,同時也會添加方法的參數(shù)類型(是throwable的子類)紫谷,當(dāng)拋出具體的異常,spring 會執(zhí)行@ExceptionHandler指定的相應(yīng)異常的方法
那對于上面兩種方式是怎么實(shí)現(xiàn)的呢?
在DispatcherServlet中
具體的內(nèi)容是在ExceptionHandlerExceptionResolver 其實(shí)這個類也是實(shí)現(xiàn)HandlerExceptionResolver
1 是取到當(dāng)前controller上的有@ExceptionHandler注解的方法
2 是取到@ControllerAdvice 注解類上的@ExceptionHandler注冊的方法