Sobes.tech
Назад к вопросам
Junior — Middle
64

Каким образом инициировать уничтожение экземпляра Prototype, созданного с помощью Spring?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

В Spring контейнер управляет жизненным циклом бинов с скоупом singleton, включая их уничтожение. Для бинов с скоупом prototype Spring создает экземпляры по запросу, но не отслеживает их жизненный цикл после создания, поэтому автоматического вызова методов уничтожения не происходит.

Чтобы инициировать уничтожение экземпляра prototype, нужно сделать это вручную. Обычно это делается путем вызова метода, помеченного аннотацией @PreDestroy или другого кастомного метода, отвечающего за освобождение ресурсов.

Пример:

@Component
@Scope("prototype")
public class MyPrototypeBean {
    public void cleanup() {
        // код очистки, освобождения ресурсов
    }
}

// Где-то в коде, где получен бин:
MyPrototypeBean bean = context.getBean(MyPrototypeBean.class);
// Используем bean
// ...
// Явно вызываем метод очистки
bean.cleanup();

Если нужен автоматический вызов методов уничтожения, можно реализовать интерфейс DisposableBean и вызывать метод destroy() вручную.

Итого: для prototype бинов в Spring уничтожение экземпляра и вызов методов очистки должны быть инициированы вручную, так как контейнер не управляет их жизненным циклом после создания.