Hardspring

Что такое Spring Bean lifecycle?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Bean lifecycle: instantiation → populate properties (@Autowired/@Value) → Aware callbacks → BeanPostProcessor → init callbacks → готов → destroy callbacks.

@Component
public class MyBean implements InitializingBean, DisposableBean {

    @PostConstruct              // 1. после inject зависимостей
    public void init() { /* логика, зависящая от injected полей */ }

    @Override
    public void afterPropertiesSet() { /* 2. InitializingBean */ }

    // 3. custom init-method через @Bean(initMethod = "...")

    @PreDestroy                 // 4. при shutdown контекста
    public void cleanup() { /* освобождение ресурсов */ }

    @Override
    public void destroy() { /* 5. DisposableBean */ }
}
  • BeanPostProcessor.postProcessAfterInitialization — здесь AOP proxying;
  • Не использовать constructor для логики, зависящей от injected полей (они ещё null) — @PostConstruct;
  • ApplicationListener<ContextRefreshedEvent> — после полной готовности контекста;
  • Для prototype scope Spring не управляет destroy.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.