Есть ли возможность создать два 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, для каждого запроса будет создаваться новый экземпляр, но это уже не синглтон.

 

Заключение:
Да, можно создать два бина синглтона, если у них разные идентификаторы. Это полезно для случаев, когда нужно настроить один и тот же класс по-разному.

Уровень

  • Рейтинг:

    2

  • Сложность:

    7

Навыки

  • Spring

Ключевые слова

Подпишись на Java Developer в телеграм