인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

fightnyy님의 프로필 이미지
fightnyy

작성한 질문수

스프링 핵심 원리 - 기본편

의존관계 자동 주입 - 조회한 빈이 모두 필요할 때, List, Map

작성

·

305

0

안녕하세요 영한님 제목에 있는 강의를 듣던 도중 궁금 한 것이 생겨 질문 남깁니다.

다름이아니라 아래와 같이 코드를 구성하였을 때 DiscountService는 AnnotationConfigApplicationContext에 넣어줌으로써 Bean으로 등록 된다는 것은 이해가 됩니다. 하지만 DiscountService 클래스에 있는 policyMap 과policyList는 제 생각으로는 아무것도 등록이 안되어있는 것이 맞을 텐데 어떻게 FixDiscountpolicy와 RateDiscountPolicy가 들어가는지 이해가 잘 되지 않습니다. 이 필드들은 각각 Map과 List이고 제네릭(?)만 DiscountPolicy 인데 

스프링 컨테이너가 "음 Map 과 List 가 DiscountPolicy로 표현이 되었네?  그럼 내가 DiscountPolicy 타입으로 된 Bean이 있나?  아 ! AutoAppConfig에서 ComponentScan으로 해보니까 FixDiscountpolicy, RateDiscountPolicy가 있네? 그럼 그냥 이거 넣어야 겠다." 이런  메커니즘으로 동작하는 것인가요?

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. fightnyy님

AutoAppConfig를 통해서 이미 스프링이 FixDiscountpolicy와 RateDiscountPolicy를 스프링 빈으로 다 등록해 둡니다.

스프링은 Map이나 List의 경우에는 약간 특수한 처리를 합니다.

fightnyy님이 생각하셨던 것 처럼 다음 메커니즘으로 동작합니다^^

스프링 컨테이너가 "음 Map 과 List 가 DiscountPolicy로 표현이 되었네?  그럼 내가 DiscountPolicy 타입으로 된 Bean이 있나?  아 ! AutoAppConfig에서 ComponentScan을 통해서 이미 FixDiscountpolicy, RateDiscountPolicy를 스프링 빈으로 등록해두었으니 이걸 사용해야 겠구나. 라고 처리가 됩니다.

감사합니다.

fightnyy님의 프로필 이미지
fightnyy
질문자

영한님 그럼 추가 질문 드리자면 String, Long, List 같은 자바에서 이미 구현된 Class 들에 대해서는 스프링 컨테이너가 별도로 Bean으로 만들지 않는것인가요?

수도 코드로 설명드리자면

if (java 언어 내에서 구현된 Class이면):

    Bean으로 등록안함

else : /*사용자가 만든클래스*/

    Bean으로 등록함

이런식으로 컨테이너가 구성되어 있는것인가요?

fightnyy님의 프로필 이미지
fightnyy

작성한 질문수

질문하기