Назад к вопросам
Middle
83
questionbank
Каков цикл жизни Spring Beans?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
-
Инициализация:
- Создание объекта Bean.
- Заполнение свойств через Dependency Injection (
@Autowired,@Valueи т.д.). - Выполнение метода
setBeanName()(если Bean реализуетBeanNameAware). - Выполнение метода
setBeanFactory()(если Bean реализуетBeanFactoryAware). - Выполнение метода
setApplicationContext()(если Bean реализуетApplicationContextAware). - Выполнение метода
postProcessBeforeInitialization()методовBeanPostProcessor. - Выполнение инициализационных методов:
@PostConstructаннотированные методы.- Метод, указанный в атрибуте
initMethodопределения Bean-а. - Метод
afterPropertiesSet()(если Bean реализуетInitializingBean).
- Выполнение метода
postProcessAfterInitialization()методовBeanPostProcessor.
-
Использование:
- Bean готов к использованию.
-
Уничтожение (при завершении контекста 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() |
Обработка после уничтожения |