-
(스프링 기본) 24 - 조회된 빈이 모두 필요할 때 (List, Map)개발/Spring 2024. 10. 28. 16:22
해당 빈이 모두 필요할 경우 List 또는 Map 을 활용하면 된다.
public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); } 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 = " + policies); } } }
이렇게 하면 등록된 빈을 모두 조회한다.
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 = " + policies); } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); return discountPolicy.discount(member, price); } }
DiscountService 는 Map 으로 모든 DiscountPolicy 를 주입 받는다.
따라서 fixDiscountPolicy 와 rateDiscountPolicy 가 주입된다.
discount() 메서드는 discountCode 로 fixDiscountPolicy 가 넘어오면 map 에서
fixDiscountPolicy 빈을 찾아서 실행한다.
출처 : 김영한 스프링 핵심 원리 - 기본편
'개발 > Spring' 카테고리의 다른 글
(스프링 기본) 26 - 빈 생명주기 콜백 (0) 2024.10.29 (스프링 기본) 25 - 의존 관계 등록 올바른 실무 기준 (자동, 수동) (0) 2024.10.28 (스프링 기본) 23 - 어노테이션 만들기 (0) 2024.10.28 (스프링 기본) 22 - 조회된 빈이 2개 이상 문제 (@Qualifier, @Primary) (0) 2024.10.28 (스프링 기본) 21 - 롬복 사용하기 (@Getter, @Setter + 생성자 주입 깔끔하게 넣기) (0) 2024.10.28