-
Spring - 동일 타입의 빈을 모두 주입받을 수 있는 List, MapSpring/Spring 2022. 1. 24. 12:35728x90반응형
같은 타입의 빈 중 필요한 빈을 @Primary, @Qualifier를 통해 주입받아 사용할 수 있었다. 그런데 같은 타입의 빈이 모두 필요한 경우는 어떻게 해야 할까?
지금까지 블로깅 내용을 예로 들어보자. 지금까지 원하는 할인 정책(RateDiscountPolicy, FixDiscountPolicy) 중 필요한 정책을 선택하여 주입받아 사용해 왔다. 그런데 클라이언트가 할인의 종류를 선택할 수 있다고 가정했을 때 이 두 개의 정책 모두 주입받아야 사용해야 할 것이다. 물론 @Qualifier를 이용하여 주입받을 DiscountPolicy 필드를 2개 선언하여 주입할 수 있지만, 만약 할인 정책이 10개, 100개 라면 엄청난 코드 중복이 발생할 것이다.
이를 해결하기 위해 List와 Map을 이용한다.
Map과 List
- 동일 타입의 빈들을 한번에 주입받을 수 있다.
- Map<'빈 이름', '빈 객체'>
- List<'빈 객체'>
@Service pulbic 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; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } }
위와 같이 List와 Map은 같은 타입의 빈들을 한 번에 주입받아 원하는 빈을 사용할 수 있다.
728x90반응형'Spring > Spring' 카테고리의 다른 글
Spring - 스프링 빈의 초기화, 소멸 메서드(생명주기 콜백) (0) 2022.01.25 Spring - 동일 타입의 빈이 2개 이상일 경우 의존관계 주입 방법 (0) 2022.01.24 Spring - 다양한 의존관계 주입 방법(생성자 주입, 수정자 주입, 필드 주입) (0) 2022.01.24 Spring - 컴포넌트 스캔(Component Scan) (0) 2022.01.23 Spring - 싱글톤 컨테이너 (0) 2022.01.23