Жизненный цикл Bean
Bean проходит несколько этапов
Когда контейнеру нужен bean, работа не заканчивается вызовом конструктора. Spring создаёт объект, передаёт ему зависимости, выполняет этап инициализации, а при закрытии контекста может дать объекту возможность освободить ресурсы.
@Component
class CacheClient {
@PostConstruct
void connect() {
System.out.println("connected");
}
@PreDestroy
void disconnect() {
System.out.println("disconnected");
}
}
Метод с @PostConstruct вызывается после того,
как объект создан и его зависимости уже установлены. Это подходящее место для инициализации,
которой нужны готовые зависимости. @PreDestroy позволяет выполнить
очистку перед уничтожением bean при нормальном закрытии контекста.
Упрощённая последовательность
- Spring создаёт экземпляр bean.
- Контейнер подставляет необходимые зависимости.
- Выполняются механизмы Spring, работающие вокруг инициализации.
- Запускаются инициализационные callbacks.
- Bean готов к обычной работе.
- При завершении контекста выполняются callbacks уничтожения.
Позже мы отдельно разберём механизм, который позволяет Spring вмешиваться в этапы до и после инициализации. Сейчас достаточно видеть главное: bean существует внутри управляемого контейнером жизненного цикла.
Конструктор — ещё не момент полной готовности bean.
Если инициализация зависит от других beans, безопаснее выполнять её после того,
как контейнер уже закончил внедрение зависимостей.
Проверь себя
Разбор задания
Ментор знает решение и поможет тебе прийти к нему самостоятельно
Войди, чтобы использовать Ментора
Ментор учитывает текущую задачу и историю диалога.
Войти
Проверь важные нюансы и ответ после собственной попытки.
Войди, чтобы посмотреть решение
Решение и разбор доступны после авторизации.
Войти