我正在尝试使用拦截在控制器中进行异常处理的演示@Finally
。
我故意NullPointerException
在控制器中并试图在@Finally
块中捕获异常。
当我尝试这样做时,它可以工作:
@Finally
static void log(Throwable e) {
if( e == null ){
Logger.info("Inside FInally: Action call was successful");
} else{
Logger.info("Inside Finally: Action call failed", e);
}
}
但是如果我尝试这个它不起作用:
@Finally
static void log(NullPointerException e) {
if( e == null ){
Logger.info("Inside FInally: Action call was successful");
} else{
Logger.info("Inside Finally: Action call failed", e);
}
}
同样,如果我考虑@Catch
拦截,那么以下两种方法都有效:
@Catch(value = Throwable.class , priority = 2)
public static void te(Throwable throwException){
.....
}
@Catch(value = NullPointerException.class , priority = 1)
public static void npe(Throwable throwNullPointerException){
.....
}
@Finally
为什么第二种情况在拦截中不起作用?对任何类型的异常只 Throwable
使用超类而不是使用任何特定的子类异常是否是一种强迫行为?
请让我知道这件事。