Как создать singleton-бин при запуске Spring приложения?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Для создания singleton-бина при запуске Spring приложения можно использовать несколько подходов:
-
С помощью аннотации
@Component(или производных@Service,@Repository,@Controller) и указатьscope="singleton"(хотя это значение по умолчанию). Spring по умолчанию создает эти бины Eagerly (при старте контекста).// Пример класса Singleton @Component public class MySingletonBean { // Поля и методы класса } -
С помощью аннотации
@Beanвнутри@Configurationкласса. По умолчанию бины, объявленные таким образом, также являются singleton'ами и создаются при старте.// Пример конфигурационного класса @Configuration public class AppConfig { @Bean public MySingletonBean mySingletonBean() { return new MySingletonBean(); } } -
Явно указать
lazy-init="false"для XML-конфигурации или@Lazy(false)для Java-конфигурации. Это гарантирует создание бина не при первом запросе, а при старте контекста, даже если его scope неsingleton. Однако для scopesingletonэто поведение по умолчанию.// Пример с @Lazy(false) @Component @Lazy(false) public class AnotherSingletonBean { // Поля и методы класса }// Пример XML-конфигурации // <bean id="myXmlSingletonBean" class="com.example.MySingletonBean" lazy-init="false"/>
Для всех перечисленных методов, если не указано иное, Spring создает один экземпляр бина и помещает его в ApplicationContext при его инициализации. Этот экземпляр затем используется для всех зависимостей.