Ответ
Нет, не будет. Spring не управляет полным жизненным циклом бинов с областью видимости prototype.
Причина: Spring создает экземпляр prototype-бина, внедряет зависимости и передает его клиенту. Контейнер больше не отслеживает этот экземпляр и не вызывает методы его уничтожения.
Пример:
@Scope("prototype")
@Component
public class PrototypeBean {
@PreDestroy
public void cleanup() {
// Этот метод никогда не будет вызван Spring-контейнером.
}
}
Решение: Для ручного освобождения ресурсов prototype-бина используйте:
- Шаблон
DisposableBean(не рекомендуется из-за связывания с Spring API). - Явный вызов специального метода-очистки клиентским кодом.
- Использование callback-метода, аннотированного
@PreDestroy, в бине-клиенте, который управляет жизнью prototype-бина.