Sobes.tech
Junior — Middle
96

Бір типтің екі түрлі жүзеге асырылуы бар екі бины болғанда, Spring тәуелділікті енгізу үшін қайсысын қолданатынын қалай анықтайды?

Сұралған компаниялар
СБЕРСБЕР

AI-дан жауап

sobes.tech AI

Егер Spring контейнерінде бір типтегі екі бин әртүрлі жүзеге асырылулармен болса, тәуелділікті енгізу кезінде қосымша ақпаратсыз қайшылық пайда болады және Spring NoUniqueBeanDefinitionException қателігін тастайды.

Қай бин қолданылатынын көрсету үшін келесі тәсілдер пайдаланылады:

  1. @Qualifier аннотациясы — қажетті биннің атын нақты көрсетуге мүмкіндік береді:
@Autowired
@Qualifier("beanName")
private MyService myService;
  1. Өріс немесе параметрдің аты биннің атымен сәйкес келеді — Spring аты бойынша сәйкестендіруге тырысады.

  2. @Primary аннотациясы — бір бинді басым деп белгілейді, егер @Qualifier көрсетілмесе:

@Bean
@Primary
public MyService primaryService() {
    return new MyServiceImpl1();
}

@Bean
public MyService secondaryService() {
    return new MyServiceImpl2();
}
  1. Коллекциялар қолдану — барлық осы типтегі биндерді тізім немесе картаға енгізу:
@Autowired
private List<MyService> services;

Осылайша, Spring қай бин қолданылатынын @Qualifier, @Primary немесе аты бойынша нақты көрсетілімдер арқылы анықтайды немесе қосымша анықталмаған жағдайда қате тастайды.