@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로 최우선 순위 지정
'Java > Spring' 카테고리의 다른 글
서버, 서블릿, 멀티쓰레드 개념 (0) | 2021.09.15 |
---|---|
초기화 콜백, 소멸 콜백 (0) | 2021.09.13 |
롬복 (0) | 2021.09.12 |
컴포넌트 스캔과 의존성 자동 주입 (0) | 2021.09.11 |
싱글톤 방식 문제점 (0) | 2021.09.10 |