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

«Какие этапы жизненного цикла Spring управляет для бина с областью видимости Prototype?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Spring управляет начальными этапами жизненного цикла prototype-бина, но не финальными.

Полный контроль для singleton (для сравнения):

  1. Создание экземпляра
  2. Внедрение зависимостей (популяция свойств)
  3. Вызов методов инициализации
  4. Бин готов к использованию
  5. Вызов методов уничтожения при остановке контекста

Ограниченный контроль для prototype:

  1. ✅ Создание экземпляра
  2. ✅ Внедрение зависимостей
  3. ✅ Вызов методов инициализации:
    • Методы, помеченные @PostConstruct
    • Метод afterPropertiesSet() интерфейса InitializingBean
    • Метод init, указанный в @Bean(initMethod = "...")
  4. ✅ Бин возвращается клиенту
  5. Методы уничтожения НЕ вызываются. Spring "забывает" о бине после шага 4.

Практический вывод: Всегда явно освобождайте ресурсы, занятые prototype-бином. Не полагайтесь на @PreDestroy или DisposableBean.