해결 방법을 하나씩 알아보자.

조회 대상 빈이 2개 이상일 때 해결 방법

Autowired 필드 명 매칭

**@Autowired**는 타입 매칭을 시도하고, 이때 여러 빈이 있으면 필드 이름, 파라미터 이름으로 빈 이름을 추가한다.

기존코드

@Autowired
private DiscounPolicy discountpolicy

필드 명을 빈 이름으로 변경

@Autowired
private DiscountPolicy rateDiscountPolicy

필드 명이 **rateDiscountPolicy**이므로 정상 주입된다.

필드 명 매칭은 먼저 타입 매칭을 시도하고 그 결과에 여러 빈이 있을 때 추가로 동작하는 기능이다. (전 시간에 FixdiscountPolicy와 RateDiscountPolicy 스프링 빈에 등록함) ex) discountPolicy : fixdiscountPolicy , discountPolicy : rateDiscountPolicy

@Autowired 매칭 정리

  1. 타입 매핑
  2. 타입 매핑의 결과가 2개 이상일 때 필드 명, 파라미터 명으로 빈 이름 매칭

OrderServiceImpl

@Autowired
public OrderServiceImpl(MemberRepository memberRepository, **DiscountPolicy rateDiscountPolicy**) {
		this.memberRepository = memberRepository;
		**this.discountPolicy = rateDiscountPolicy**
}

@Qualifier 사용