이럴 땐 빈 이름을 정해주면 됨.
일단 테스트
public class ApplicationContextSameBeanFindTest {
ApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class);
@Test
@DisplayName("타입으로 조회 시 같은 타입일 경우")
public void findBeanByType(){
ac.getBean(MemberRepository.class);
}
@Configuration
static class SameBeanConfig {
@Bean
public MemberRepository memberRepository1(){
return new MemoryMemberRepository();
}
@Bean
public MemberRepository memberRepository2(){
return new MemoryMemberRepository();
}
}
}
걍 테스트용으로 이쪽 클래스에서만 사용할 inner클래스 만듦
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.example.core.member.MemberRepository' available: expected single matching bean but found 2: memberRepository1,memberRepository2
NoUniqueBeanDefinitionException
@Test
@DisplayName("타입으로 조회 시 같은 타입일 경우")
public void findBeanByType(){
Assertions.assertThrows(NoUniqueBeanDefinitionException.class, ()->ac.getBean(MemberRepository.class));
}
@Test
@DisplayName("특정 타입 모두 조회")
public void findAllBeanByType(){
Map<String, MemberRepository> beansOfType = ac.getBeansOfType(MemberRepository.class);
for (String key : beansOfType.keySet()) {
System.out.println("key = " + key + "value" + beansOfType.get(key));
}
assertThat(beansOfType.size()).isEqualTo(2);
}
테스트 검증(Assertions 이용)은 테스트에 꼭 들어가는 듯.
getBeansOfType 한 타입의 beans 모두 Map 형태로 반환.
'스프링 > 1. 스프링 핵심 원리' 카테고리의 다른 글
24강. 빈 컨테이너 구조 (0) | 2023.07.17 |
---|---|
23강. 빈 조회 시 빈들이 상속관계에 있다면? (0) | 2023.07.17 |
21강. 빈 조회 (0) | 2023.07.17 |
20강. 빈 확인 (0) | 2023.07.17 |
19강. 스프링 컨테이너 생성 (0) | 2023.07.16 |