동일 타입으로 조회한 빈이 모두 필요한 경우가 있다.
예를 들어 고객이 RateDiscountPolicy를 선택해서 할인을 받을지 FixDiscountPolicy를 선택해서 할인을 받을지 고를 수 있다고 생각해 보자.
이를 위해 같은 타입의 빈을 List나 Map으로 받아와야 한다.
@Autowired
public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) {
this.policyMap = policyMap;
this.policies = policies;
}
이렇게 Map과 List로 의존관계를 주입 받을 수 있다.
Map에는 빈 이름이 key 인스턴스가 value로 저장된다.
List에는 각 인스턴스가 저장되어 있다.
이렇게 두개의 discountPolicy를 주입 받은 후 각 할인 정책에 따라 할인하는 discount 함수를 만들어 보자
public int discount(Member member, int price, String discountCode) {
DiscountPolicy discountPolicy = policyMap.get(discountCode);
return discountPolicy.discount(member, price);
}
위 코드는 discountCode에 rateDiscountPolicy 또는 fixDiscountPolicy 둘 중 하나가 stirng으로 들어온다.
discountCode를 key로 Map에서 해당하는 할인 인스턴스를 받은 후 인스턴스의 클래스에 discount 함수를 호출해서 리턴하면 할인 금액이 나오게 된다.
출처 : 인프런 스프링 핵심 원리 - 기본 편 김영한
'스프링' 카테고리의 다른 글
프로토타입 스코프 (0) | 2023.07.24 |
---|---|
빈 생명주기 콜백 (0) | 2023.07.24 |
조회 빈이 2개 이상일 때 주입받는 방법 (0) | 2023.07.22 |
생성자 주입의 장점, 룸복사용 (0) | 2023.07.21 |
다양한 의존관계 주입 방법 (0) | 2023.07.19 |