Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Spring: initialization, lazy

Что такое lazy-инициализация бинов в Spring и как работает аннотация @Lazy?

Вопрос проверяет понимание жизненного цикла бинов и механизмов оптимизации старта приложения.

Короткий ответ

Lazy-инициализация означает, что бин создаётся не при старте контекста, а при первом обращении к нему. Аннотация @Lazy указывает Spring отложить создание бина. Это позволяет ускорить старт приложения и не создавать ненужные объекты. По умолчанию все singleton-бины инициализируются eagerly. @Lazy меняет это поведение.

Длинный ответ

По умолчанию Spring старается создать все singleton-бины как можно раньше.

Определение

Lazy-инициализация — это режим, при котором бин создаётся только в момент первого использования, а не при старте контекста.

Как работает @Lazy

Аннотацию можно применять в разных местах.

1. На уровне бина

@Lazy
@Component
class HeavyService {
}

Поведение:

  1. Контекст стартует без создания бина

  2. При первом запросе бин создаётся

  3. Далее используется как обычный singleton

2. На уровне конфигурации

@Configuration
@Lazy
class AppConfig {
}

Поведение:

  • Все бины внутри становятся lazy по умолчанию

3. При внедрении зависимости

@Autowired
@Lazy
private HeavyService heavyService;

В этом случае:

  • Внедряется прокси

  • Реальный бин создаётся при первом вызове

Зачем использовать lazy-инициализацию

  1. Ускорение старта приложения

  2. Экономия памяти

  3. Отложенная инициализация тяжёлых ресурсов

Минусы

  1. Ошибки проявляются позже

  2. Первый вызов может быть медленным

  3. Сложнее отлаживать

Вывод

@Lazy полезна для тяжёлых или редко используемых бинов, но не должна применяться повсеместно без причины.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Spring

    Spring

Ключевые слова

#initialization

#lazy

Подпишись на Java Developer в телеграм