Sobes.tech
Senior
54

Spring бір типтегі екі бині болған кезде қалай қақтығысты шешеді? Тәуелділіктерді қалай енгізуге болады?

Сұралған компаниялар
СБЕРСБЕР

AI-дан жауап

sobes.tech AI

Если в Spring-контейнере определено несколько бинов одного типа, при попытке автосвязывания по типу возникает конфликт, так как Spring не может однозначно выбрать нужный бин.

Как решить конфликт:

  1. Использовать аннотацию @Qualifier — явно указать имя бина, который нужно внедрить.
@Autowired
@Qualifier("beanName")
private MyService myService;
  1. Использовать имя поля или параметра метода, совпадающее с именем бина — Spring попытается сопоставить по имени.

  2. Аннотация @Primary — пометить один из бинов как основной, тогда он будет внедряться по умолчанию.

@Bean
@Primary
public MyService myPrimaryService() {
    return new MyServiceImpl1();
}

@Bean
public MyService mySecondaryService() {
    return new MyServiceImpl2();
}
  1. Внедрять коллекцию бинов — если нужно работать со всеми реализациями:
@Autowired
private List<MyService> services;

Таким образом, для инжектирования зависимости при конфликте нужно либо указать конкретный бин через @Qualifier, либо использовать @Primary, либо внедрять коллекцию бинов.