Java @建造后及;检查异常

Java @建造后及;检查异常,java,jakarta-ee,exception-handling,postconstruct,Java,Jakarta Ee,Exception Handling,Postconstruct,文档中提到了带注释的方法: “该方法不能引发选中的异常。” 如何处理例如在这种方法中抛出的IOException?只需将其包装在RuntimeException中,让用户担心对象的错误初始状态? 或者@PostConstruct是验证和初始化已注入依赖项的对象的错误位置吗?是的,将其包装在运行时异常中。最好是一些更具体的东西,比如IllegalStateException 请注意,如果init方法失败,通常应用程序不会启动。使用类似这样的软化异常,实际上是在RuntimeException中包装

文档中提到了带注释的方法:

“该方法不能引发选中的异常。”

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

是的,将其包装在运行时异常中。最好是一些更具体的东西,比如
IllegalStateException


请注意,如果init方法失败,通常应用程序不会启动。

使用类似这样的软化异常,实际上是在RuntimeException中包装:


通常,如果您希望或预期当其中一个bean抛出异常时应用程序启动失败,则可以使用Lombok的
@skillythrows

正确使用时,它非常有用且简洁:

@SneakyThrows
@PostConstruct
public void init() {
    // I usually throw a checked exception
}
最近有一篇文章在这里讨论它的利弊:


享受吧

有意思,我没注意到。这似乎是一个奇怪的限制,因为该方法是反射式调用的。
PostConstruct
方法用于初始化对象。你为什么要把抛出
IOException
的东西放在initialize方法中?@Medopal:我正在检查服务的init方法中是否存在DB表,哪个扔IOException@medopal重定向或发送HTTP错误代码时也会抛出
IOException
此约束主要是从哲学的角度考虑的,因为在初始化对象时不能抛出异常,还是附加了一个更大的实际问题?我不完全理解这一部分,为什么施工后不能抛出一个选中的例外,你可以有类似的效果,而不使用龙目山。假设您在
init
方法中抛出
SomeCheckedException
,您可以编写
public void init()抛出SomeCheckedException{
,结果应该与Lombok
@skileythrows
相同。
} catch (IOException e) {
        throw softenException(e);
        //throw e; // this would require declaring 'throws IOException'
}
@SneakyThrows
@PostConstruct
public void init() {
    // I usually throw a checked exception
}