Sobes.tech
Junior — Middle

Как да инициирате унищожаването на Prototype инстанция, създадена с Spring?

sobes.tech AI

Отговор от 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 уничтожение экземпляра и вызов методов очистки должны быть инициированы вручную, так как контейнер не управляет их жизненным циклом после создания.