Есть ли возможность создать два Singleton'а в Spring?
Этот вопрос проверяет знание концепции синглтона (singleton) в Spring и методов для создания нескольких экземпляров одного класса.
Короткий ответ
В Spring можно создать два бина синглтона, если они имеют разные идентификаторы. Это можно сделать через явную регистрацию бинов с разными именами в конфигурации.
Длинный ответ
В Spring бины с областью видимости singleton означают, что контейнер создает только один экземпляр для каждого бина с уникальным идентификатором. Однако можно зарегистрировать несколько бинов одного класса с разными именами, что создаст несколько экземпляров.
Способы создания:
- Через явное указание в конфигурации:
@Configuration
public class AppConfig {
@Bean(name = "beanOne")
public MyBean myBeanOne() {
return new MyBean();
}
@Bean(name = "beanTwo")
public MyBean myBeanTwo() {
return new MyBean();
}
}
- Через использование аннотации @Qualifier: Можно указать, какой бин использовать, если их несколько.
@Autowired
@Qualifier("beanOne")
private MyBean myBean;
Ключевые аспекты:
- Каждый бин с разным именем создается один раз (для каждого имени) в контейнере Spring.
- Это не нарушает принцип синглтона, так как каждый бин по-прежнему уникален в рамках своего идентификатора.
Область видимости: Если используется область видимости prototype, для каждого запроса будет создаваться новый экземпляр, но это уже не синглтон.
Заключение:
Да, можно создать два бина синглтона, если у них разные идентификаторы. Это полезно для случаев, когда нужно настроить один и тот же класс по-разному.