작성
·
165
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예
[질문 내용]
여기에 질문 내용을 남겨주세요.
DiscountService 생성자 주입을 통해 자동 의존관계 주입을 받을 때, Map과 List 형태로 의존관계를 주입 받았는데 이 형태에는 제한이 없나요?
어떠한 형태로도 제가 의존관계를 주입받겠다는 annotation만 잘 적어주면, 스프링이 알아서 형식에 맞게 넣어주는건가요?
Map<String, DiscountPolicy> 으로 의존관계를 주입받을 때, String은 입력받은 DiscountPolicy의 이름이 되는 것 같은데, 이렇게 입력받은 클래스의 이름을 따로 받을 수 있는 것처럼 클래스의 부가적인 정보를 알 수 있는 형식이 더 있나요?
Map<int, DiscountPolicy> 이렇게 하면, 어떤 식으로 채워지나요?
답변 2
0
안녕하세요. 봄날님, 공식 서포터즈 OMG입니다.
Map<int, DiscountPolicy> 이렇게 하면, 어떤 식으로 채워지나요?
Java의 제네릭 시스템은 원시 타입(primitive types)을 직접 사용하지 못합니다. 따라서 int 타입 대신에 Integer 클래스를 사용해야 하며, Map<Integer, BeanClass>
에서는 스프링의 컬렉션 주입 기능이 정상 동작하지 않습니다.
반면, 강의에서와 같이 Map<String, BeanClass>
라 한다면 map에는 정상적으로 key에는 빈의 이름이, value에는 Bean 인스턴스가 주입됩니다.
스프링에서 편의 기능을 지원하지만, 모든 상황 모든 케이스에 대한 지원이 아닌, 특정 요건을 만족해야만 동작한다고 이해하시면 될 것 같습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
봄날님의 질문에 답변드리겠습니다.
Spring에서 의존관계 주입은 다양한 형태로 가능합니다. 주로 생성자 주입, setter 주입, 필드 주입 등의 방법이 있으며, 컬렉션 타입인 List
나 Map
등도 의존관계 주입에 사용될 수 있습니다. 특히, Map
이나 List
형태로 의존관계를 주입받는 경우, Spring은 해당 타입의 모든 빈을 찾아 주입해줍니다. 이때, Map
의 경우는 빈의 이름을 키로 사용하며, List
는 해당 타입의 빈을 모두 순서대로 모읍니다.
MapString
형식의 키로 사용됩니다. Spring은 어노테이션 기반의 설정으로, 필요한 의존성을 자동으로 주입하는데 이때, 타입 정보를 기반으로 합니다. Map의 키로 사용되는 String은 등록된 빈의 이름이며, 이는 Spring 내부에서 자동으로 관리됩니다. 그렇기 때문에 Map
실제로, Spring에서는 주로 빈의 타입과 이름을 활용하여 의존관계를 관리합니다. 빈 이름 이외의 부가적인 정보를 활용하여 의존관계를 주입하는 특별한 방법은 일반적으로 제공되지 않습니다. 대신, 빈을 등록할 때 추가적인 설정을 통해 부가적인 정보를 주입하거나 구분하는 방법들을 활용할 수 있습니다.
봄날님의 질문에 더 깊이 있는 내용이나, Spring의 의존관계 주입 방법에 대해 알고 싶으시다면, 다음 링크들을 참고하시면 도움이 될 것 같습니다.
List
와 Map
을 사용하여 의존성 주입을 받는 방법과 관련된 장비한 설명을 제공합니다.Map<String, DiscountPolicy>
과 같이 타입으로 정의된 컬렉션에 스프링이 어떻게 모든 빈을 주입하는지 구체적으로 설명합니다.저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.