Ответ
@Qualifier — это аннотация Spring Framework, которая уточняет, какой конкретно бин должен быть внедрен (autowired), когда в контексте приложения существует несколько бинов, реализующих один и тот же тип (интерфейс или класс). Без нее Spring выбросит исключение NoUniqueBeanDefinitionException.
Пример проблемы и решения:
-
Два бина одного типа:
@Component("firstService") public class FirstService implements MyService { /* ... */ } @Component("secondService") public class SecondService implements MyService { /* ... */ } -
Внедрение с
@Qualifier:@Service public class ClientService { @Autowired @Qualifier("firstService") // Явно указываем имя бина для внедрения private MyService service; }
Альтернативы и дополнения:
@Primary: Аннотация, помечающая один бин как предпочтительный по умолчанию.- Имя поля: Если имя поля совпадает с именем бина (например,
firstService), Spring может внедрить его без@Qualifier. - Кастомные квалификаторы: Можно создавать собственные аннотации, помеченные
@Qualifier, для более семантичного выбора.