Sobes.tech
Назад к вопросам
Senior
8

Что произойдёт при старте приложения, если несколько бинов подходит для одного типа?

Компании, где спрашивали
Позитив Технолоджис

Ответ от нейросети

sobes.tech AI

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

Чтобы решить эту проблему, можно:

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

Пример:

@Component
@Primary
public class ServiceImpl1 implements MyService {}

@Component
public class ServiceImpl2 implements MyService {}

// Внедрение
@Autowired
private MyService myService; // будет внедрен ServiceImpl1