69просмотров
27.9%от подписчиков
12 сентября 2024 г.
Score: 76
В Spring аннотации @Primary и @Qualifier используются для разрешения неоднозначности при внедрении зависимостей (Dependency Injection), когда имеется несколько бинов одного типа. Они позволяют указать, какой именно бин должен быть использован в тех или иных случаях.
1⃣ Аннотация @Primary
Аннотация @Primary используется, чтобы указать основной (по умолчанию) бин среди нескольких возможных кандидатов одного типа. Когда Spring находит несколько бинов одного типа, помеченный @Primary бин будет использован по умолчанию, если не указано иное.
@Component
public class FirstService implements MyService {
} @Component
@Primary
public class SecondService implements MyService {
}
В этом примере два класса, FirstService и SecondService, реализуют интерфейс MyService. При внедрении через @Autowired Spring по умолчанию будет использовать SecondService, так как он помечен аннотацией @Primary. 2⃣ Аннотация @Qualifier
Аннотация @Qualifier позволяет точно указать, какой именно бин следует использовать, даже если он не является основным (@Primary). Она применяется вместе с @Autowired или другими механизмами инъекции для явного указания нужного бина.
@Component("firstService")
public class FirstService implements MyService {
} @Component("secondService")
public class SecondService implements MyService {
}
Чтобы явно указать, какой из этих бинов должен быть использован, используется аннотация @Qualifier
@Autowired
@Qualifier("firstService")
private MyService myService; // Внедрит FirstService
⚠ Выводы:
✅ @Primary: подходит, если у вас есть несколько бинов одного типа, и один из них должен быть используем по умолчанию в большинстве случаев.
✅ @Qualifier: используется для более точного контроля, когда вам нужно выбрать конкретный бин среди нескольких, особенно в случаях, когда использование бина по умолчанию (с @Primary) не подходит.