Встречается на собеседованиях • сегодня
Почему не вызывается метод destroy у Bean со scope="prototype" в Spring
В Spring, бины с scope="prototype" не управляются контейнером полностью после их создания. Контейнер создаёт экземпляр, настраивает его и передаёт клиенту, но не отслеживает его дальнейший жизненный цикл. Поэтому методы destroy (например, @PreDestroy или DisposableBean.destroy()) не вызываются автоматически.
Решение:
Клиент, получивший prototype-бин, должен сам вызвать его уничтожение, если это необходимо. Например, через ConfigurableBeanFactory.destroyBean().
Пример:
java
@Scope("prototype")
@Component
public class PrototypeBean implements DisposableBean {
@Override
public void destroy() {
System.out.println("Destroying prototype bean");
}
}
// Использование:
@Autowired
private ConfigurableBeanFactory beanFactory;
public void usePrototypeBean() {
PrototypeBean bean = beanFactory.getBean(PrototypeBean.class);
// работа с бином
beanFactory.destroyBean(bean); // явный вызов уничтожения
}
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы