Sobes.tech
Назад к вопросам
Junior — Middle
66

Каким образом в Spring выбирается конкретная реализация Bean в процессе выполнения приложения?

Компании, где спрашивали
УралсибУралсиб

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

sobes.tech AI

В Spring конкретная реализация Bean выбирается с помощью механизма внедрения зависимостей (Dependency Injection). Если в контексте приложения определено несколько реализаций одного интерфейса или класса, Spring использует следующие подходы для выбора нужного Bean:

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

Пример использования @Qualifier:

@Component
public class ServiceImpl1 implements MyService { ... }

@Component
public class ServiceImpl2 implements MyService { ... }

@Component
public class Consumer {
    private final MyService myService;

    @Autowired
    public Consumer(@Qualifier("serviceImpl1") MyService myService) {
        this.myService = myService;
    }
}

Если не указать @Qualifier и есть несколько реализаций, Spring выбросит исключение из-за неоднозначности. Использование @Primary на одном из Bean позволяет сделать его выбор по умолчанию.