PreDestroy Работает как обратный вызов, когда контекст освобождает компонент (т. Е. При закрытии контекста).Это означает, что PreDestroy не связан с PostConstruct.Если bean-компонент существует в контексте, и он освобождается, вызывается predestroy.
PostConstruct Предназначен для инициализации bean-компонентов.Если оно вызывает исключение, приложение не запустится.
Итак, отвечая на ваш вопрос ...
предоставляется вызов метода predestroy-method, если мы получаем исключение в postconstract?
PreDestroy и PostConstruct не связаны.Это означает, что если PostConstruct получил исключение, но каким-то образом управлялся и метод успешно завершился, bean-компонент будет инициализирован и будет доступен в контексте.Когда придет время и контекст закроется, компонент будет выпущен, и будет вызван PreDestroy.
Если PostConstruct БРОСИТ исключение, Бин не будет доступен в контексте (и приложение не запустится), поэтому PreDestroy не будет вызываться.
Вопрос в том, как сделать максимально корректный выпуск ресурсов приложения?Этого достаточно, чтобы сделать это в аннотированном методе @PreDestroy, или я должен также перехватить исключение в аннотированном методе @PostConstract?
Вы должны перехватить исключение и освободить любой неуправляемый ресурс.Это также относится к JEE, который указывает, что в качестве передового опыта ресурсы, полученные вне контекста, должны обрабатываться программно.