← Назад к вопросам

Расскажите о жизненном цикле Spring Bean.

2.0 Middle🔥 251 комментариев
#Spring Framework

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Жизненный цикл Spring Bean

JavaScript Spring Bean — это ключевая концепция фреймворка Spring, и понимание её критично для Java-разработчика. Жизненный цикл описывает, как Spring создаёт, инициализирует, использует и уничтожает объекты Bean в контексте приложения.

Этапы жизненного цикла

1. Instantiation (Создание экземпляра) Spring создаёт экземпляр Bean, используя конструктор. На этом этапе ещё не устанавливаются зависимости.

public class MyBean {
    public MyBean() {
        System.out.println("Bean instantiated");
    }
}

2. Dependency Injection (Внедрение зависимостей) Spring внедряет зависимости через setter или конструктор.

@Component
public class MyService {
    private MyRepository repository;
    
    @Autowired
    public void setRepository(MyRepository repository) {
        this.repository = repository;
    }
}

3. Aware Callbacks Если Bean реализует интерфейсы *Aware, вызываются соответствующие методы:

  • BeanNameAware — предоставляет имя Bean
  • BeanFactoryAware — предоставляет BeanFactory
  • ApplicationContextAware — предоставляет ApplicationContext
@Component
public class MyBean implements ApplicationContextAware {
    @Override
    public void setApplicationContext(ApplicationContext ctx) {
        System.out.println("Context set");
    }
}

4. BeanPostProcessor.postProcessBeforeInitialization() Обработчик вызывается перед инициализацией Bean.

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String name) {
        System.out.println("Before init: " + name);
        return bean;
    }
}

5. InitializingBean / @PostConstruct Вызывается метод инициализации Bean. Может быть реализован двумя способами:

// Способ 1: реализация интерфейса InitializingBean
@Component
public class MyBean implements InitializingBean {
    @Override
    public void afterPropertiesSet() {
        System.out.println("Bean initialized");
    }
}

// Способ 2: аннотация @PostConstruct
@Component
public class MyService {
    @PostConstruct
    public void init() {
        System.out.println("Initialization method");
    }
}

6. BeanPostProcessor.postProcessAfterInitialization() Обработчик вызывается после инициализации Bean.

@Override
public Object postProcessAfterInitialization(Object bean, String name) {
    System.out.println("After init: " + name);
    return bean;
}

Использование Bean

После инициализации Bean готов к использованию в приложении.

Уничтожение Bean

При завершении работы приложения Spring вызывает методы уничтожения:

@Component
public class MyService implements DisposableBean {
    @PreDestroy
    public void destroy() {
        System.out.println("Bean destroyed");
    }
    
    @Override
    public void destroy() throws Exception {
        System.out.println("Cleanup resources");
    }
}

Пример полного цикла

@Component
public class LifecycleDemoBean implements InitializingBean, DisposableBean {
    public LifecycleDemoBean() {
        System.out.println("1. Constructor called");
    }
    
    @Autowired
    private SomeDependency dependency;
    
    @Override
    public void afterPropertiesSet() {
        System.out.println("3. InitializingBean method called");
    }
    
    @PostConstruct
    public void postConstruct() {
        System.out.println("2. PostConstruct method called");
    }
    
    @PreDestroy
    public void preDestroy() {
        System.out.println("4. PreDestroy method called");
    }
    
    @Override
    public void destroy() {
        System.out.println("5. DisposableBean destroy method called");
    }
}

Практическое применение

Понимание жизненного цикла позволяет корректно инициализировать ресурсы, управлять подключениями к БД, запускать фоновые процессы и правильно освобождать ресурсы при завершении приложения.