강의

멘토링

로드맵

Inflearn brand logo image

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

수성강님의 프로필 이미지
수성강

작성한 질문수

스프링 핵심 원리 - 기본편

@Autowired 필드 명, @Qualifier, @Primary

안녕하세요 질문 컴파일 에러 문제에대해서 질문있습니다.

작성

·

90

0

@Qualifier 에 관하여 질문이 있습니다.

@Component
@Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy 

@Component
@Qualifier("fixDiscountPolicy")
public class FixDiscountPolicy implements DiscountPolicy

@Autowired
    public OrderServiceImpl(MemberRepository memberRepository,@Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }

이렇게 설정을하고 테스트를 돌리면

class AutoAppConfigTest {

    @Test
    void basicScan() {
        ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);
        DiscountPolicy bean = ac.getBean(DiscountPolicy.class);
        System.out.println("bean.getClass() = " + bean.getClass().getName());
    }
}

위에 테스트에서

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy

중복 빈이 발생하는데 @Qualifier를 설정해도 중복 빈이 발생하는 이유는 무엇일까요?
@Primart로 rateDiscount 를 우선 순위를 설정하면 테스트는 정상적으로 통과합니다.

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 수성강님

Gradle을 사용해서 빌드하셔야 합니다.

참고로 이 문제는 Build, Execution, Deployment -> Build Tools -> Gradle에서
Build and run using를 IntelliJ IDEA로 선택한 경우에만 발생한다. Gradle로 선택한 경우에는 Gradle이 컴파일 시점에 해당 옵션을 자동으로 적용해준다.

자세한 내용은 다음을 참고해주세요.

https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit?tab=t.0#heading=h.b1yk4ued1pxo

감사합니다.

수성강님의 프로필 이미지
수성강
질문자

감사합니다!

수성강님의 프로필 이미지
수성강

작성한 질문수

질문하기