@PostConstruct & Проверенные исключения

В документе @PostConstruct говорится о аннотированных методах:

"Метод НЕ ДОЛЖЕН выдавать проверенное исключение".

Как можно поступить, например, с IOException, который может быть сгенерирован таким способом? Просто оберните его в RuntimeException и позвольте пользователю беспокоиться о неправильном начальном состоянии объекта? Или @PostConstruct - это неправильное место для проверки и инициализации объектов, в которые были введены зависимости?

3 ответа

Решение

Да, оберните это в исключение времени выполнения. Предпочтительно что-то более конкретное, как IllegalStateException,

Обратите внимание, что в случае сбоя метода init приложение обычно не запускается.

Как правило, если вы хотите или ожидаете сбой запуска приложения, когда один из ваших bean-компонентов выдает исключение, вы можете использовать Lombok @SneakyThrows,

Это невероятно полезно и кратко при правильном использовании:

@SneakyThrows
@PostConstruct
public void init() {
    // I usually throw a checked exception
}

Вот недавняя статья, обсуждающая ее плюсы и минусы: предпочитаю @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'
}
Другие вопросы по тегам