스프링/1. 스프링 핵심 원리

22강. 빈 조회 시 동일한 타입이 둘 이상일 경우

sdafdq 2023. 7. 17. 22:40

이럴 땐 빈 이름을 정해주면 됨.

일단 테스트

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