Sobes.tech
Junior — Middle

Чӣ гуна Spring муайян мекунад, ки кадом иҷрои интерфейсро интихоб кунад вақте ки чанд вариант вуҷуд дорад, бо @Autowired?

sobes.tech AI

Ҷавоб аз AI

Коли дар Spring вуҷуд доранд чандин татбиқҳо барои як интерфейс ва истифода мешавад анотацияи @Autowired, чаҳорчӯба кӯшиш мекунад, ки муайян кунад, ки кадом татбиқро бояд ворид кунад, бо риояи қоидаҳои зерин:

  1. Барои номи бин: Spring ҷустуҷӯ мекунад бин, ки номи он мувофиқ бо номи майдон ё параметри аст, ки воридот дар он сурат мегирад.
  2. Анотацияи @Qualifier: Агар чанд номзад бошад, метавон explicitly муайян кард, ки кадом бин бояд истифода шавад, бо истифода аз @Qualifier("номиБин").
  3. Анотацияи @Primary: Агар яке аз биноҳо ҳамчун @Primary нишон дода шавад, он ҳамчун пешфарз интихоб мешавад.
  4. Истисно дар ҳолати номуайянӣ: Агар ягон шароит кӯмак накунад, Spring истиснои NoUniqueBeanDefinitionException хоҳад партофт.

Масалан:

@Component
@Primary
public class ServiceImpl1 implements MyService {}

@Component
public class ServiceImpl2 implements MyService {}

@Autowired
private MyService myService; // бо сабаби `@Primary`, ServiceImpl1 ворид мешавад

@Autowired
@Qualifier("serviceImpl2")
private MyService myService2; // explicitly нишон дода шудааст ServiceImpl2