DiscountPolicy라는 동일 타입의 빈인 RateDiscountPolicy, FixDiscountPolicy를 모두 가져와 동적으로 사용하고 싶은 경우는 어떻게 할까?
=> List, Map에 빈을 담아와서 필요할 때 꺼내서 사용
public class AllBeanTest {
@Test
public void findAllBean() {
ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class);
DiscountService discountService = ac.getBean(DiscountService.class);
Member member = new Member(1, "memberA", Grade.VIP);
int discountPrice = discountService.discount(member, 25000, "rateDiscountPolicy");
Assertions.assertThat(discountPrice).isEqualTo(2500);
}
static class DiscountService {
// 여러개의 빈이 모두 필요
private final Map<String, DiscountPolicy> dcPolicyMap;
private final List<DiscountPolicy> dcPolicyList;
public DiscountService(Map<String, DiscountPolicy> dcPolicyMap, List<DiscountPolicy> dcPolicyList) {
this.dcPolicyMap = dcPolicyMap;
this.dcPolicyList = dcPolicyList;
}
public int discount(Member member, int price, String discountCode) {
DiscountPolicy discountPolicy = dcPolicyMap.get(discountCode);
return discountPolicy.discount(member, price);
}
}
}