Объясните, почему аннотация @PreDestroy не подходит для использования с паттерном Prototype в Spring?

Аннотация @PreDestroy в Spring используется для указания метода, который должен быть вызван перед уничтожением бина.

Короткий ответ

Что ответить на собеседовании

Аннотация @PreDestroy в Spring используется для указания метода, который должен быть вызван перед уничтожением бина. Однако для бинов с областью видимости Prototype Spring не управляет жизненным циклом полностью — он создает объект и передает его клиенту, но не отслеживает, когда бин больше не нужен и не вызывает методы уничтожения.

Подробный разбор

Ответ с пояснениями

Аннотация @PreDestroy в Spring используется для указания метода, который должен быть вызван перед уничтожением бина. Однако для бинов с областью видимости Prototype Spring не управляет жизненным циклом полностью — он создает объект и передает его клиенту, но не отслеживает, когда бин больше не нужен и не вызывает методы уничтожения.

Поэтому @PreDestroy не сработает для прототипных бинов, так как Spring не вызывает метод уничтожения автоматически. Ответственность за очистку таких объектов лежит на клиентском коде, который должен самостоятельно вызвать нужные методы или освободить ресурсы.

Пример:

@Component
@Scope("prototype")
public class MyPrototypeBean {
    @PreDestroy
    public void cleanup() {
        System.out.println("Cleanup called");
    }
}

В этом случае cleanup() не будет вызван автоматически при завершении использования бина.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее