• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Map, List로 빈 조회 시 질문

24.04.01 14:16 작성 조회수 220

0

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

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

답변 2

·

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2024.04.01

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

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

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.01

안녕하세요, 인프런 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, 컬렉션 타입의 빈 자동 주입 방식, 커스텀 어노테이션을 활용한 빈 우선 순위 지정에 대해 추가적인 정보를 얻을 수 있습니다.

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