@PostConstruct&检查异常

时间:2012-01-05 09:34:15

标签: java java-ee exception-handling postconstruct

@PostConstruct文档中,它描述了带注释的方法:

“方法不得抛出已检查的异常。”

如何处理例如一个IOException可以在这样的方法中抛出?只需将其包装在RuntimeException中,让用户担心对象的错误初始状态? 或者@PostConstruct是错误的地方来验证和初始化注入其依赖项的对象?

3 个答案:

答案 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'
}