Junior — Middle
Ako Spring určuje, ktorú implementáciu rozhrania vybrať pri použití @Autowired, keď existuje viacero možností?
sobes.tech AI
Odpoveď od AI
Keď v Spring existuje niekoľko implementácií rovnakého rozhrania a používa sa anotácia @Autowired, rámec sa pokúsi určiť, ktorú implementáciu injektovať podľa týchto pravidiel:
- Podľa názvu beanu: Spring hľadá bean, ktorého názov zodpovedá názvu poľa alebo parametra, do ktorého sa vykonáva injekcia.
- Anotácia
@Qualifier: Ak je viac kandidátov, môžete výslovne určiť požadovaný bean pomocou@Qualifier("názovBeanu"). - Anotácia
@Primary: Ak je jeden z beanov označený ako@Primary, bude vybraný ako predvolený. - Výnimka pri nejasnosti: Ak žiadna z podmienok nepomôže, Spring vyhodí výnimku
NoUniqueBeanDefinitionException.
Príklad:
@Component
@Primary
public class ServiceImpl1 implements MyService {}
@Component
public class ServiceImpl2 implements MyService {}
@Autowired
private MyService myService; // bude injektovaný ServiceImpl1 kvôli @Primary
@Autowired
@Qualifier("serviceImpl2")
private MyService myService2; // explicitne uvedený ServiceImpl2