🔷 작업을 하는 데 있어 어떤 한 타입의 스프링 빈이 모두 필요하다면 ➡️ Map과 List를 이용하여 전략패턴을 구현할 수 있다.
🔸 예) 클라이언트가 할인의 종류(1000원 정액 할인, 10% 정률할인)를 선택할 수 있는 경우
void findAllBean(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member(1L, "userA", Grade.VIP); int discountPrice = discountService.discount(member, 10000, "fixDiscountPolicy"); } 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; public int discount(Member member, int price, String discountCode){ DiscountPolicy discountPolicy = policyMap.get(discountCode); return discountPolicy.discount(memeber, price); } }