static class DiscountService {
private final Map<String, DiscountPolicy> policyMap;
private final List<DiscountPolicy> policies;
public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies){
this.policyMap = policyMap;
this.policies = policies;
}
public int discount(Member member, int price, String discountCode) {
DiscountPolicy discountPolicy = policyMap.get(discountCode);
return discountPolicy.discount(member, price);
}
스프링에 의해 자동의존 관계 주입 된다. @Autowired 생성자 하나밖에 없으면 안 붙여도 됨
DiscountPolicy를 빈으로 두 개 이상 등록해놨다면 policyMap에 두 개 이상 담기게 될 것이다.
void findAllBean(){
ApplicationCOntext ac = new AnnotationConfigApplicationContext(AppConfig.class, DiscountService.class);
DiscountService ds = ac.getBean(DiscountService.class);
Member member = new Member(1L,"userA",Grade.VVIP);
int discountPrice = discountService.discount(member,가격,할인정책);
}
할인 정책에 입력한 값에 따른 알맞은 할인 가격이 나오게 될 것이다.