在@PostConstruct文档中,它谈到了带注释的方法:
“该方法不得抛出已检查的异常。”
如何处理例如可以在这种方法中抛出的 IOException ?只需将它包装在一个 RuntimeException 中,让用户担心对象的错误初始状态?或者@PostConstruct 是验证和初始化注入其依赖项的对象的错误位置?
在@PostConstruct文档中,它谈到了带注释的方法:
“该方法不得抛出已检查的异常。”
如何处理例如可以在这种方法中抛出的 IOException ?只需将它包装在一个 RuntimeException 中,让用户担心对象的错误初始状态?或者@PostConstruct 是验证和初始化注入其依赖项的对象的错误位置?
是的,将其包装在运行时异常中。最好是更具体的东西,比如IllegalStateException
.
请注意,如果 init 方法失败,通常应用程序将无法启动。
通常,如果您希望或期望应用程序启动失败,当您的 bean 之一抛出异常时,您可以使用 Lombok 的@SneakyThrows
.
如果使用得当,它非常有用且简洁:
@SneakyThrows
@PostConstruct
public void init() {
// I usually throw a checked exception
}
最近有一篇文章在这里讨论了它的优缺点:Prefer Lombok's @SneakyThrows to rethrowing checked exception as RuntimeExceptions
享受!
使用这样的软化异常,实际上包装在 RuntimeException 中: https ://repl.it/@djangofan/SoftenExceptionjava
private static RuntimeException softenException(Exception e) {
return checkednessRemover(e);
}
private static <T extends Exception> T checkednessRemover(Exception e) throws T {
throw (T) e;
}
然后用法是这样的:
} catch (IOException e) {
throw softenException(e);
//throw e; // this would require declaring 'throws IOException'
}