@ PostConstruct docでは、注釈付きメソッドについて述べています。
「メソッドはチェック済み例外をスローしてはなりません。」
たとえば、どのように対処しますか?そのようなメソッドでスローできるIOException?それをRuntimeExceptionでラップし、ユーザーにオブジェクトの初期状態の欠陥について心配させますか?または、@ PostConstructは、依存関係が注入されたオブジェクトを検証および初期化するための間違った場所ですか?
はい、実行時例外でラップします。 IllegalStateException
のようなより具体的なものをお勧めします。
Initメソッドが失敗した場合、通常、アプリケーションは起動しません。
一般に、いずれかのBeanが例外をスローしたときに欲しい、または期待するアプリケーションの起動に失敗した場合は、Lombokの@SneakyThrows
を使用できます。
正しく使用すると、非常に便利で簡潔です。
@SneakyThrows
@PostConstruct
public void init() {
// I usually throw a checked exception
}
その長所と短所を議論する最近の記事があります: Lombokの@SneakyThrowsをチェックして例外を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'
}