사용자가 FixDiscountPolicy, RateDiscountPolicy 중 할인 정책을 선택할 수 있을 때 조회한 빈이 모두 필요한 상황이다. 아래 코드에서 Map을 사용해서 두개의 빈을 모두 가져와 저장해두고, discount() 메서드에서 DiscountPolicy 타입으로 조회 후 Map에 저장된 할인 정책을 꺼내어 할인을 적용하고 결과값을 반환한다.
static class DiscountService {
private final Map<String, DiscountPolicy> policyMap;
private final List<DiscountPolicy> policies;
@Autowired
public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) {
this.policyMap = policyMap;
this.policies = policies;
System.out.println("policyMap = " + policyMap);
System.out.println("policies = " + policyMap);
}
public int discount(Member member, int price, String discountCode) {
DiscountPolicy discountPolicy = policyMap.get(discountCode);
return discountPolicy.discount(member, price);
}
}