Для создания singleton-бина при запуске Spring приложения можно использовать несколько подходов:
С помощью аннотации @Component (или производных @Service, @Repository, @Controller) и указать scope="singleton" (хотя это значение по умолчанию). Spring по умолчанию создает эти бины Eagerly (при старте контекста).
java
С помощью аннотации @Bean внутри @Configuration класса. По умолчанию бины, объявленные таким образом, также являются singleton'ами и создаются при старте.
java
Явно указать lazy-init="false" для XML-конфигурации или @Lazy(false) для Java-конфигурации. Это гарантирует создание бина не при первом запросе, а при старте контекста, даже если его scope не singleton. Однако для scope singleton это поведение по умолчанию.
java
java
Для всех перечисленных методов, если не указано иное, Spring создает один экземпляр бина и помещает его в ApplicationContext при его инициализации. Этот экземпляр затем используется для всех зависимостей.