Назад к вопросам
Middle
83
questionbank

Каков цикл жизни Spring Beans?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

  1. Инициализация:

    • Создание объекта Bean.
    • Заполнение свойств через Dependency Injection (@Autowired, @Value и т.д.).
    • Выполнение метода setBeanName() (если Bean реализует BeanNameAware).
    • Выполнение метода setBeanFactory() (если Bean реализует BeanFactoryAware).
    • Выполнение метода setApplicationContext() (если Bean реализует ApplicationContextAware).
    • Выполнение метода postProcessBeforeInitialization() методов BeanPostProcessor.
    • Выполнение инициализационных методов:
      • @PostConstruct аннотированные методы.
      • Метод, указанный в атрибуте initMethod определения Bean-а.
      • Метод afterPropertiesSet() (если Bean реализует InitializingBean).
    • Выполнение метода postProcessAfterInitialization() методов BeanPostProcessor.
  2. Использование:

    • Bean готов к использованию.
  3. Уничтожение (при завершении контекста Spring):

    • Выполнение метода postProcessBeforeDestruction() методов DestructionAwareBeanPostProcessor.
    • Выполнение методов уничтожения:
      • @PreDestroy аннотированные методы.
      • Метод, указанный в атрибуте destroyMethod определения Bean-а.
      • Метод destroy() (если Bean реализует DisposableBean).
    • Выполнение метода postProcessAfterDestruction() методов DestructionAwareBeanPostProcessor.
// Пример использования аннотаций жизненного цикла
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class MySpringBean {

    private String myProperty;

    public void setMyProperty(String myProperty) {
        this.myProperty = myProperty;
        System.out.println("4. setMyProperty() called: " + myProperty); // Пример шага инициализации - заполнение свойств
    }

    @PostConstruct
    public void customInitMethod() {
        System.out.println("9. @PostConstruct method called."); // Пример шага инициализации - @PostConstruct
    }

    public void anotherInitMethodFromConfig() {
        System.out.println("10. Custom initMethod from configuration called."); // Пример шага инициализации - initMethod
    }

    public void useBean() {
        System.out.println("12. Bean is in use. Property: " + myProperty); // Пример шага использования
    }

    @PreDestroy
    public void customDestroyMethod() {
        System.out.println("14. @PreDestroy method called."); // Пример шага уничтожения - @PreDestroy
    }

    public void anotherDestroyMethodFromConfig() {
        System.out.println("15. Custom destroyMethod from configuration called."); // Пример шага уничтожения - destroyMethod в конфигурации
    }
}
Шаг Описание Пример
1 Создание экземпляра Bean new MySpringBean()
2 Заполнение свойств (DI) bean.setMyProperty("value")
3 BeanNameAware.setBeanName() Вызывается если Bean реализует интерфейс BeanNameAware
4 BeanFactoryAware.setBeanFactory() Вызывается если Bean реализует интерфейс BeanFactoryAware
5 ApplicationContextAware.setApplicationContext() Вызывается если Bean реализует интерфейс ApplicationContextAware
6 BeanPostProcessor.postProcessBeforeInitialization() Обработка до инициализации
7 InitializingBean.afterPropertiesSet() Вызывается если Bean реализует интерфейс InitializingBean
8 @PostConstruct метод Метод, аннотированный @PostConstruct
9 init-method из конфигурации Метод, указанный в атрибуте initMethod
10 BeanPostProcessor.postProcessAfterInitialization() Обработка после инициализации
11 Bean готов к использованию Вызов методов Bean-а
12 DestructionAwareBeanPostProcessor.postProcessBeforeDestruction() Обработка до уничтожения
13 DisposableBean.destroy() Вызывается если Bean реализует интерфейс DisposableBean
14 @PreDestroy метод Метод, аннотированный @PreDestroy
15 destroy-method из конфигурации Метод, указанный в атрибуте destroyMethod
16 DestructionAwareBeanPostProcessor.postProcessAfterDestruction() Обработка после уничтожения