스프링 핵심원리 기본편8 - 동일 타입이 둘 이상
본문 바로가기

TIL/스프링 핵심원리 - 기본편 with 인프런(김영한님)

스프링 핵심원리 기본편8 - 동일 타입이 둘 이상

반응형

안녕하세요 오늘 강의를 정리해 보겠습니다.
 
스프링 빈을 조회할 때 타입으로 조회 시 같은 타입의 스프링빈이 둘 이상이면 오류가 발생합니다.
이럴 때는 빈 이름을 지정해 주면 됩니다.
 
getBeansOfType() 사용 시 해당 타입의 모든 빈을 조회할 수 있습니다.
 
소스로 보여드리겠습니다.
 
일반 먼저 저희가 계속 사용할 Appconfig 파일을 수정하면서 테스트를 하는 건 별로 좋은 방향이 아니기 때문에 class안에 static class로 임시 config class를 만들어 주겠습니다.
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    @Configuration
    static class SameBeanConfig{  // AppConfig를 수정하지 않기 위해 요기서만 쓰기 위해 만듬
        
        @Bean
        public MemberRepository memberRepository1() {
            return new MemoryMemberRepository();
        }
        
        @Bean
        public MemberRepository memberRepository2() {
            return new MemoryMemberRepository();
        }
        
    }
cs

 
그다음에 ac.getBean(MemberRepository.class);로 조회 시 에러가 발생할 거입니다. 이유는 타입으로 조회하였는데 임시 config를 보면 동일 타입이 2개 있기 때문입니다.
 
코드를 돌려보면 "NoUniqueBeanDefinitionException"에러가 발생합니다.
해결을 위해서는 ac.getBean(MemberRepository.class)로 타입으로만 조회하지 말고 빈 이름을 지정해 주면 됩니다.
ac.getBean("memberRepository2",MemberRepository.class) 이렇게 해주면 중복 에러가 발생하지 않습니다.
 
또 특정 타입을 모두 조회하기 위해서는  ac.getBeansOfType(MemberRepository.class);를 사용해 주면 되고 해당 결과를 Map에 넣어 for문을 돌려 확인이 가능합니다.
 
다음에는 상속 관계에 대한 공부를 해보겠습니다.
감사합니다.

반응형