Вопрос проверяет понимание жизненного цикла бина и точек инициализации и уничтожения объектов.
@PostConstruct вызывается после создания бина и внедрения всех зависимостей. @PreDestroy вызывается перед уничтожением бина и завершением контекста. Эти методы позволяют выполнить инициализацию и освобождение ресурсов. Они являются частью жизненного цикла бина.
Spring управляет не только созданием объектов, но и их жизненным циклом.
Определение:
Жизненный цикл бина — это последовательность этапов от создания объекта до его уничтожения контейнером.
Упрощенная последовательность:
создание объекта
внедрение зависимостей
инициализация
использование
уничтожение
@PostConstruct используется для инициализации бина.
Особенности:
вызывается один раз
все зависимости уже внедрены
подходит для проверки состояния и подготовки ресурсов
@PostConstruct
public void init() {
// инициализация ресурса
}
@PreDestroy вызывается перед уничтожением бина.
Особенности:
вызывается при закрытии контекста
используется для освобождения ресурсов
не вызывается при аварийном завершении JVM
@PreDestroy
public void cleanup() {
// освобождение ресурсов
}
работают только для бинов, управляемых Spring
не вызываются для prototype-бинов при уничтожении
не должны содержать тяжелую логику
@PostConstruct отвечает за инициализацию бина после внедрения зависимостей, а @PreDestroy — за корректное завершение его работы перед уничтожением.