在使用JDK动态代理的时候,捕获异常的只有JDK代理的预置异常
try {
method.invoke(clazz, param);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (IllegalArgumentException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
但是有时候代理方法需要自定义异常,这个时候自定义的异常无法在这里捕获,所以针对这种情况需要特殊处理,修改上述代码如下
try {
method.invoke(clazz, param);
} catch (Exception e) {
// 自定义异常
if (Objects.equals(e.getCause().getClass(), CustomException.class)) {
CustomException customException = (CustomException) e.getCause();
// 处理自定义异常
} else {
// 系统抛出的异常在这里
throw new RuntimeException(e);
}
}
评论区