@Autowired
의 조회 대상 빈이 2개 이상일 때@Autowired
필드명 매칭@Qualifer
-> @Qualifer
끼리 매칭 -> 빈 이름 매칭@Primary
사용RateDiscountPolicy.java
@Componetnt
@Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy{
...
} // RateDiscountPolicy 에 Qualifier 이름을 정해준다.
FixDiscountPolicy.java
@Component
@Qualifier("fixDiscountPolicy")
public class FixDiscountPolicy implements DiscountPolicy{
...
} // FixDiscountPolicy 에도 Qualifier 이름을 붙여준다.
OrderServiceImpl.java
public class OrderServiceImpl implements OrderService{
...
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, @Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy){
...
}
} // 매개변수의 discountpolicy 에 사용할 DiiscountPolicy 구현체의 Qualifier name 을 붙여서 사용한다.
여러 개의 Bean 이 조회가 될 때, @Primary
가 붙어있는 구현체의 의존성이 먼저 주입된다.
-> 스프링에서는 자동보다는 수동, 넓은 것 보다는 좁은 범위의 선택권이 우선순위가 높기 때문에, @Qualifier 가 우선권을 가진다.