인프런 커뮤니티 질문&답변

최성훈님의 프로필 이미지
최성훈

작성한 질문수

스프링 핵심 원리 - 기본편

스프링 빈 조회 - 상속 관계

타입 조회 관련 질문 드립니다

작성

·

245

1

스프링 빈 - 동일한 타입이 둘 이상에서 타입으로 조회시 같은 타입이 둘 이상 있으면 중복 오류가 발생한다고 말씀을 하셨는데 이번 강의(스프링 빈 - 상속관계)를 들으니 이전 케이스가 같은 타입으로 조회를 했기에 생겼던 문제인지가 궁금해 졌습니다 예를 들어 코드가 아래와 같은 경우

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class);

@Test
@DisplayName("타입으로 조회시 같은 타입이 둘 이상 있으면, 중복 오류가 발생한다.")
void findByBeanTypeDuplicate(){
    assertThrows(NoUniqueBeanDefinitionException.class,()->ac.getBean(MemberRepository.class));
}

@Configuration
static class SameBeanConfig{
    @Bean
    public MemberRepository memberRepository1(){
        return new MemoryMemberRepository();
    }
    @Bean
    public MemberRepository memberRepository2(){
        return new MemoryMemberRepository();
    }
}

위의 코드는 타입으로 빈을 조회할 때 MemberRepository를 줍니다. 이걸 주면 오늘 배운 상속 내용처럼 이걸 구현한 MemoryMemberRepository를 가지고 오게 되는데
이 자식이 2개가 존재하므로 이번 강의 설명처럼 부모 타입으로 조회하였는데 자식 타입이 2개가 나왔으므로 에러가 생긴 케이스 같습니다.
(만약 해당 문제가 싱글톤 컨테이너와 관련이 되어 있는 문제라면 제가 생각한 아래의 구상이 맞는건지 궁금합니다)

답변 1

1

안녕하세요. 최성훈님, 공식 서포터즈 David입니다.

rateDiscountPolicy, fixDiscountPolicy를 DiscountPolicy로 조회하는 것도 첫번째 사례랑 동일합니다.

다른점이 있다면 첫번째 사례는 구현체 타입도 동일하기 때문에 조회시 빈의 이름(memberRepository1, memberRepository2)으로 특정하여 조회해야만 NoUniqueBean 예외를 피할 수 있습니다.

감사합니다.

최성훈님의 프로필 이미지
최성훈
질문자

그렇다면 "부모 타입으로 조회를 했는데 같은 자식 타입이 여러개 나와서 중복이 된거다"라고 생각하면 될까요??

최성훈님의 프로필 이미지
최성훈
질문자

감사합니다!!

최성훈님의 프로필 이미지
최성훈

작성한 질문수

질문하기