빈을 생성하다보면 하나의 타입에 여러개의 빈이 필요로하고, 조회하고 싶을때가 있다.
예를들어, <Menu> 타입으로 지정된 빈들인 자장면, 탕수육 ,짬뽕 빈을 조회하고 싶을때나
<DiscountPolicy> 타입으로 할인정책 빈들인 고정할인, 비율할인 빈들을 조회하고 싶을때 종종있다.
이럴경우, Map 또는 List를 활용해서 조회하면 편리하다.
코드로 한번 작성을 해보자면
1.우선 해당 타입인 빈들만 조회시키는 하나의 기능 클래스를 만듭시다.
@ReauiredArgsConstructor로 생성자 주입을 하나 만듭시다.
필드로 Map<> 하나를 설정했는데 Key값으로는 bean이름을 받을것이며,
Value값으로는 조회된 빈의 구현체를 받을겁니다.
주입을 받은 <할인정책> 구현체는, Map에 저장이될것이고, 우리는 discount()메소드로 필요할때 뽑아쓸겁니다.
2.DiscountService에 주입시키기
1번 코드인 상태에서 discount()메소드를 호출하면 NullPointerException이 터집니다.
당연하죠! 우리가 구현해놓은 빈들을 주입을 안시켯는데 호출해봐야 무슨 소용입니까
AnnotationConfigApplicat.... 줄여서 ac가 하는일은 () 괄호안에있는 클래스를 읽어주는 용입니다.
그 읽은걸 기반으로 생성된 빈들로 스프링컨테이너를 생성하죠.
우선 AutoConfig로 설정해놨던 빈들을 읽은뒤, DiscountService를 읽는 과정에서, 주입이 알아서됩니다.
(생성자가 1개라서 자동 @AutoWired)
3.테스트 해보기
만들어뒀던, DiscountService 주입이 완료된 빈을 가져온뒤, 할인정책을 적용해봅시다.
첫번째 fixDiscountPolicy는 고정으로 1000원을할인하고,
두번째 rateDiscountPolicy는 비율 10퍼센트로 할인을 해줍니다.
성공적인 테스트!
'자바 > 스프링(Spring)' 카테고리의 다른 글
웹 스코프(Scope)와 프록시 기술 (0) | 2021.12.31 |
---|---|
스프링 빈 생명주기 (0) | 2021.12.26 |
스프링 빈 중복 조회 해결법 (0) | 2021.12.22 |
자바 스프링 롬복(lombok) 라이브러리 (0) | 2021.12.21 |
스프링의 다양한 AutoWired (의존관계) 주입법 (0) | 2021.12.19 |