해결된 질문
작성
·
431
·
수정됨
1
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
저랑 같은 궁금증을 가진 분의 질문을 보았습니다.
new AnnotationConfigApplicationContext(); 인자 속에 DiscountService.class만 존재하는 경우, DiscountService 생성자의 매개 변수 타입이 빈 등록이 안 되어 있어 주입해 줄 타입의 빈이 존재하지 않아 오류가 발생해야 한다고 생각하는데 오류가 안 나는 이유는
스프링 컨테이너에서는 Map, List를 주입해 줄 때 내부적으로 빈 Map, List를 먼저 만들고,
아무런 빈이 존재하지 않으면 빈 Map, List가 주입하게 되는 것이기 때문에 오류가 발생하지 않는다고 하셨는데
Map, List가 아닌 일반적인 경우와 비교되지 않아 아직 확실히 이해가 되지 않았습니다.
그러면 스프링 컨테이너에서 Map, List가 아닌 일반적인 빈을 주입해 줄 때는
Map, List랑 다르게 내부적으로 무언가를 미리 만들어 두지 않기 때문에, 존재하는 빈이 스캔되지 않을 경우 아무 것도 주입할 수 없어서 오류가 나는 것이고,
Map, List는 스캔되는 빈들이 따로 없어도 내부적으로 스프링이 만든 비어 있는 Map, List이 있어서 그걸 주입하므로 오류가 안 난다고 이해하면 되는 건가요?
그리고 답변 내용 중에 '스프링 컨테이너에서는 Map, List를 주입해 줄 때 내부적으로 빈 Map, List를 먼저 만들고, '
'빈 Map, List'라는 것은
비어 있는 Map, List인가요
Bean Map, List인가요?
'비어 있는'이랑 '빈(Bean)'이랑 헷갈려서 질문드립니다.
답변 1
2
안녕하세요. 11 1님
Q: Map, List는 스캔되는 빈들이 따로 없어도 내부적으로 스프링이 만든 비어 있는 Map, List이 있어서 그걸 주입하므로 오류가 안 난다고 이해하면 되는 건가요? -> 네 맞습니다.
빈(Emtpy) List라는 것은 new ArrayList()라고 보시면 됩니다. 리스트의 객체는 생성되어 있지만 그 안에 담긴 데이터 없는 상황인 것이지요.
List, Map 같은 컬렉션을 주입 받으면, 관련된 스프링 빈이 없어도 빈(Empty) 컬렉션이라도 만들어서 넣어는 줍니다.
물론 컬렉션이 아니라 특정 빈(Bean)을 직접 주입 받아야 하는데 없다면 오류가 발생합니다.
감사합니다.
답변 감사합니다.