Junior — Middle
96
Бір типтің екі түрлі жүзеге асырылуы бар екі бины болғанда, Spring тәуелділікті енгізу үшін қайсысын қолданатынын қалай анықтайды?
Сұралған компаниялар
AI-дан жауап
sobes.tech AI
Егер Spring контейнерінде бір типтегі екі бин әртүрлі жүзеге асырылулармен болса, тәуелділікті енгізу кезінде қосымша ақпаратсыз қайшылық пайда болады және Spring NoUniqueBeanDefinitionException қателігін тастайды.
Қай бин қолданылатынын көрсету үшін келесі тәсілдер пайдаланылады:
@Qualifierаннотациясы — қажетті биннің атын нақты көрсетуге мүмкіндік береді:
@Autowired
@Qualifier("beanName")
private MyService myService;
-
Өріс немесе параметрдің аты биннің атымен сәйкес келеді — Spring аты бойынша сәйкестендіруге тырысады.
-
@Primaryаннотациясы — бір бинді басым деп белгілейді, егер@Qualifierкөрсетілмесе:
@Bean
@Primary
public MyService primaryService() {
return new MyServiceImpl1();
}
@Bean
public MyService secondaryService() {
return new MyServiceImpl2();
}
- Коллекциялар қолдану — барлық осы типтегі биндерді тізім немесе картаға енгізу:
@Autowired
private List<MyService> services;
Осылайша, Spring қай бин қолданылатынын @Qualifier, @Primary немесе аты бойынша нақты көрсетілімдер арқылы анықтайды немесе қосымша анықталмаған жағдайда қате тастайды.