Встречается на 2% собеседований по Java

Как использовать конкретную реализацию Bean по условию в Spring

В Spring можно выбирать конкретную реализацию бина в runtime несколькими способами:

  1. @Qualifier - явное указание имени бина:
java
@Autowired
@Qualifier("specificBean")
private MyInterface bean;
  1. @Conditional - условное создание бина на основе условий:
java
@Bean
@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
public MyInterface prodBean() {
    return new ProdImpl();
}
  1. Map инъекция - получение всех реализаций:
java
@Autowired
private Map<String, MyInterface> beans;

public MyInterface getBean(String type) {
    return beans.get(type);
}
  1. FactoryBean - сложная логика создания:
java
public class MyFactoryBean implements FactoryBean<MyInterface> {
    @Override
    public MyInterface getObject() {
        return condition ? new ImplA() : new ImplB();
    }
}

Выбор зависит от сложности условий и требований к гибкости. Для простых случаев достаточно @Qualifier, для сложной логики - FactoryBean.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы