在@PostConstruct文档中,它描述了带注释的方法:
“方法不得抛出已检查的异常。”
如何处理例如一个IOException可以在这样的方法中抛出?只需将其包装在RuntimeException中,让用户担心对象的错误初始状态? 或者@PostConstruct是错误的地方来验证和初始化注入其依赖项的对象?
答案 0 :(得分:39)
是的,将其包装在运行时异常中。优选更具体的内容,如IllegalStateException
。
请注意,如果init方法失败,通常应用程序将无法启动。
答案 1 :(得分:2)
通常,如果在其中一个bean引发异常时想要或期望应用程序启动失败,则可以使用Lombok的@SneakyThrows
。
正确使用它非常有用且简洁:
@SneakyThrows
@PostConstruct
public void init() {
// I usually throw a checked exception
}
最近有一篇文章讨论了它的优缺点:Prefer Lombok’s @SneakyThrows to rethrowing checked exceptions as RuntimeExceptions
享受!
答案 2 :(得分:0)
使用像这样的软化异常,实际上是在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'
}