Java/Spring
조회되는 bean이 두개 이상일 때
필리힐리
2021. 9. 12. 22:18
스프링 핵심 원리 - 기본편 - 인프런 | 학습 페이지
지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....
www.inflearn.com
@Autowired의 기본 스캔 방식



OrderServiceImpl은 인터페이스인 DiscountPolicy만 의존한다.
그런데 의존관계를 설정할 때 스프링 컨테이너에 구현체 FixdiscountPolicy, RateDiscountPolicy 둘 다
bean으로 등록 되어 있으면 @Autowired는 어떤 객체를 선택할까?

No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy
@Autowired는 기본적으로 타입 (DiscountPolicy.class) 으로 매칭을 한다.
하나가 매칭되야하는데 구현체 두 개를 찾아서 어떤 걸 선택해야하는지 모르겠다는 에러가 나온다.
해결 방법은 세가지가 있다.
1. 파라미터명을 구현체 이름으로 지정 (@Autowired는 타입을 찾고 두 개 이상이면 필드, 파라미터 명으로 매칭)

2. @Qualifier을 통해 특정 이름 지정


3. @Primary로 최우선 순위 지정
