@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'
}