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

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

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

  1. @Qualifier - явное указание имени бина:
java
@Autowired
@Qualifier("specificImpl")
private MyInterface myBean;
  1. @Primary - помечаем предпочтительную реализацию:
java
@Primary
@Component
public class PrimaryImpl implements MyInterface {}
  1. Conditional Beans - используя аннотации типа @ConditionalOnProperty:
java
@Bean
@ConditionalOnProperty(name="service.type", havingValue="A")
public MyInterface serviceA() {
    return new ServiceA();
}
  1. ApplicationContext - получение бина по имени:
java
MyInterface bean = context.getBean("beanName", MyInterface.class);
  1. Factory Pattern - создание фабрики, которая возвращает нужную реализацию на основе условий:
java
@Service
public class MyServiceFactory {
    @Autowired
    private Map<String, MyInterface> implementations;
    
    public MyInterface getService(String type) {
        return implementations.get(type);
    }
}

Выбор зависит от конкретного сценария - если выбор статичен, лучше использовать @Qualifier или @Primary, для динамического выбора подойдут фабрики или ApplicationContext.

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

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

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

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