스프링

동일 타입 2개 이상의 빈이 모두 필요할 때

salmon16 2023. 7. 22. 22:25

동일 타입으로 조회한 빈이 모두 필요한 경우가 있다.

 

예를 들어 고객이 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