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

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

이호준님의 프로필 이미지
이호준

작성한 질문수

스프링 핵심 원리 - 기본편

조회한 빈이 모두 필요할 때, List, Map

Map, List로 빈 조회 시 질문

작성

·

531

0

안녕하세요 AllBeanTest에서 List랑 Map으로

AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); 여기서 FixDiscountPolicy랑 RateDiscountPolicy를 어떻게 스프링빈으로 등록하는지 이해가 되지않습니다. 4강 스프링 빈 조회 - 동일한 타입이 둘 이상 에서 동일한 타입의 스프링빈이 두개 이상일시 에러가 발생하고, 이를 방지하기위해 빈 이름을 지정하는걸로 나와있는데 어떻게 두개를 같이가져와 map. list에 저장 할 수 있는건가요? 그리고 rateDiscountPolicy에 @MainDiscountPolicy 어노테이션이 설정되있으면 FixDIscountpolicy대신 RateDiscountPolicy만 우선으로 가져오는걸로 이해를 햇었는데 제 생각이 어디가 잘못된건지 이해가 되지않습니다. ㅠ

답변 2

0

안녕하세요. 이호준님, 공식 서포터즈 OMG입니다. 

AI 답변 링크의 영한님의 답변을 참고해주세요 🙂

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

이호준님의 질문은 Spring의 의존관계 자동 주입에 대해 다루고 있으며, 특히 ListMap을 사용하여 빈을 조회하는 과정에서 발생하는 질문 사항입니다. Spring Framework에서는 자동 빈 주입 기능을 통해 개발자가 수동으로 빈을 관리하는 번거로움을 줄여줍니다. 해당 기능 중에는 타입에 따른 빈 주입도 포함되어 있으며, ListMap과 같은 컬렉션 타입으로 주입받을 경우 Spring은 해당 타입에 일치하는 모든 빈을 주입해줍니다.

먼저, AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class) 부분과 관련하여, AutoAppConfig 클래스에 @ComponentScan 어노테이션을 사용하면 Spring은 지정된 패키지 및 그 하위 패키지에서 @Component가 붙은 클래스를 찾아 Spring 빈으로 등록합니다. 이런 방식으로 FixDiscountPolicyRateDiscountPolicy와 같은 빈들이 자동으로 Spring ApplicationContext에 등록됩니다.

다음으로, 동일한 타입의 빈이 여러 개 있을 때의 처리 방식에 대해, Spring에서는 List 혹은 Map 사용을 통해 이를 해결할 수 있습니다. 이 경우, 해당 타입에 일치하는 모든 빈이 컬렉션에 자동으로 추가됩니다. List에는 해당 타입의 빈이 순서대로 들어가고, Map의 경우에는 빈의 이름을 키로, 빈 객체를 값으로 가지게 됩니다.

@MainDiscountPolicy 같은 커스텀 어노테이션을 사용하여 특정 빈을 우선적으로 주입받기 원할 때는, 해당 어노테이션이 붙은 빈을 우선적으로 참조합니다. 하지만 이는 @Qualifier나 커스텀 어노테이션을 사용하여 명시적으로 빈을 지정할 때에만 해당됩니다. ListMap으로 모든 빈을 주입받는 상황과는 별개의 상황으로 이해할 수 있습니다.

아래의 질문에서 비슷한 상황을 다룬 경우를 찾아볼 수 있습니다:
- “의존관계 자동 주입 - 조회한 빈이 모두 필요할 때, List, Map”
- “조회한 빈이 모두 필요할때 ( Map, List) 질문사항”

비슷한 질문의 답변을 통해 이해를 돕는 내용을 얻을 수 있으며, @AutoWired, 컬렉션 타입의 빈 자동 주입 방식, 커스텀 어노테이션을 활용한 빈 우선 순위 지정에 대해 추가적인 정보를 얻을 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이호준님의 프로필 이미지
이호준

작성한 질문수

질문하기