Sobes.tech
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:

  1. 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.
  2. Anotácia @Qualifier: Ak je viac kandidátov, môžete výslovne určiť požadovaný bean pomocou @Qualifier("názovBeanu").
  3. Anotácia @Primary: Ak je jeden z beanov označený ako @Primary, bude vybraný ako predvolený.
  4. 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