Встречается на 2% собеседований по Java
Как определить какую реализацию Bean использовать во время исполнения в Spring
В Spring можно динамически выбирать реализацию бина во время выполнения несколькими способами:
- @Qualifier - явное указание имени бина:
java
@Autowired
@Qualifier("specificImpl")
private MyInterface myBean;- @Primary - помечаем предпочтительную реализацию:
java
@Primary
@Component
public class PrimaryImpl implements MyInterface {}- Conditional Beans - используя аннотации типа
@ConditionalOnProperty:
java
@Bean
@ConditionalOnProperty(name="service.type", havingValue="A")
public MyInterface serviceA() {
return new ServiceA();
}- ApplicationContext - получение бина по имени:
java
MyInterface bean = context.getBean("beanName", MyInterface.class);- 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.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы