작성
·
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이 컴파일 시점에 해당 옵션을 자동으로 적용해준다.
자세한 내용은 다음을 참고해주세요.
감사합니다.
감사합니다!