Policy 라는 Interface가 있다고 가정하자.
Policy를 상속 받은 구현체가 2개 이상인데, 이 구현체들이 모두 스프링 컨테이너에 등록되어있다는 말이다.
예를 들면, RatePolicy implements Policy 와 FixedPolicy implements Policy가 모두 Bean 등록이 되어있어서,
아래 코드가 실행되면, 스프링은 두 policy들 사이에서 선택을 하지 못하기 때문에
NoUniqueBeanDefinitionException 오류가 발생한다.
@Autowired
private Policy policy;
@Component
@Primary
public class RatePolicy implements Policy {}
@Component
public class FixedPolicy implements Policy {}
@Bean
@Qualifier("mainPolicy")
public Policy policy() {
return new ...
}
@Autowired
public OrderServiceImpl(MemberRepository memberRepository,
@Qualifier("mainPolicy") Policy policy) {
this.memberRepository = memberRepository;
this.discountPolicy = policy;
}
@Autowired
private Policy fixedPolicy;