개발자 공부 - 인프런 온라인 강의/스프링 핵심 원리 - 기본편

[섹션 7. 의존관계 자동 주입] 조회한 빈이 모두 필요할 때, List, Map / 인프런 김영한 스프링 핵심 원리 기본편

easpop 2023. 7. 9. 21:57
728x90
반응형

이번 시간에는 조회한 빈이 모두 필요할 때, List나 Map으로 한번에 조회하는 방법에 대해서 알아보았다.

 

실무에서 보면, 해당 타입의 빈이 모두 다 필요한 경우도 있다.

예를 들어서 할인 서비스를 제공하는데, 클라이언트가 할인의 종류를 비율 할인(rate)으로 할 지,

고정 할인(fix)으로 할 지, 선택할 수 있다고 가정해보자.

스프링을 사용하면 소위 말하는, 전략 패턴을 매우 간단하게 구현할 수 있다.

 

테스트를 위해, 클래스를 생성해준다.

 

Map과 List로 받아주는 새로운 DiscountSerivce를 생성하고, 생성자를 통해서 의존관계를 주입해준다.

 

테스트를 돌려본 결과, Map은 key, value 구조로 fixDiscountPolicy와 그의 빈 객체.. 이런 식으로 들어온다.

List는 인스턴스가 바로 들어오는 식으로 빈 객체들을 받아온다.

반응형

로직을 분석하자면,

DiscountService는 Map으로 모든 DiscountPolicy를 주입받는다. 이때 fixDiscountPolicy와 rateDiscountPolicy가 주입된다.

discount() 메소드는 discountCode로 fixDiscountPolicy가 파라미터로 넘어오면, map에서 fixDiscountPolicy 빈을 찾아서 실행한다.

마찬가지로 rateDiscountPolicy가 넘어오면 rateDiscountPolicy 빈을 찾아서 실행한다.

 

주입을 분석하면,

Map은 Map의 key값에 스프링 빈의 이름을 넣어주고, value 값은 DiscountPolicy 타입으로 조회한 모든 스프링 빈을 담아준다.

List는 DiscountPolicy 타입으로 조회한 모든 스프링 빈을 담아준다.

만약 해당하는 타입의 스프링 빈이 없으면, 빈 컬렉션이나 Map을 주입한다.

728x90
반응형