По умолчанию, singleton-бины в Spring создаются при первом обращении к ним (lazy loading). Чтобы создать singleton-бин при запуске приложения (eager loading), можно использовать следующие подходы:
Использовать @Lazy(false) аннотацию:
java
Это наиболее явный способ указать, что конкретный бин должен быть инициализирован при старте Spring контекста. @Lazy(false) на уровне класса бина переопределяет любое глобальное или дефолтное поведение lazy loading.
Конфигурация через XML:
В XML-конфигурации Spring можно явно указать lazy-init="false" для определения бина:
xml
Этот атрибут управляет политикой инициализации для данного конкретного бина.
Конфигурация через Java Code (с @Bean):
При использовании конфигурации на основе Java-кода с @Configuration и @Bean, по умолчанию бины создаются при старте контекста. Однако, если вы включили глобальное lazy loading, можно переопределить его для конкретного бина:
java
Использование @Lazy(false) на методе с @Bean аналогично использованию ее на уровне класса с @Component.
Глобальное отключение Lazy Loading:
Можно отключить lazy loading глобально для всего приложения. Это не самый рекомендуемый подход, так как может увеличить время старта приложения, но он существует:
Через application.properties или application.yml:
properties
Через Java Code:
Можно настроить SpringApplicationBuilder:
java
По умолчанию Spring Boot приложения с Spring Data JPA будут создавать бины репозиториев при старте. Зависимости между бинами также влияют на порядок их создания; бин, от которого зависят другие бины, обычно создается раньше.
Выбор способа зависит от контекста и предпочтений: @Lazy(false) на уровне бина наиболее гранулированный и явный, а глобальное отключение влияет на все бины.