Назад к вопросам
Middle
108
questionbank

Как создать singleton-бин при запуске Spring приложения?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Для создания singleton-бина при запуске Spring приложения можно использовать несколько подходов:

  1. С помощью аннотации @Component (или производных @Service, @Repository, @Controller) и указать scope="singleton" (хотя это значение по умолчанию). Spring по умолчанию создает эти бины Eagerly (при старте контекста).

    // Пример класса Singleton
    @Component
    public class MySingletonBean {
        // Поля и методы класса
    }
    
  2. С помощью аннотации @Bean внутри @Configuration класса. По умолчанию бины, объявленные таким образом, также являются singleton'ами и создаются при старте.

    // Пример конфигурационного класса
    @Configuration
    public class AppConfig {
    
        @Bean
        public MySingletonBean mySingletonBean() {
            return new MySingletonBean();
        }
    }
    
  3. Явно указать lazy-init="false" для XML-конфигурации или @Lazy(false) для Java-конфигурации. Это гарантирует создание бина не при первом запросе, а при старте контекста, даже если его scope не singleton. Однако для scope singleton это поведение по умолчанию.

    // Пример с @Lazy(false)
    @Component
    @Lazy(false)
    public class AnotherSingletonBean {
        // Поля и методы класса
    }
    
    // Пример XML-конфигурации
    // <bean id="myXmlSingletonBean" class="com.example.MySingletonBean" lazy-init="false"/>
    

Для всех перечисленных методов, если не указано иное, Spring создает один экземпляр бина и помещает его в ApplicationContext при его инициализации. Этот экземпляр затем используется для всех зависимостей.