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

코더님의 프로필 이미지
코더

작성한 질문수

스프링 핵심 원리 - 기본편

ObjectProvider<MyLogger> myLoggerProvider 질문

작성

·

236

0

안녕하세요 계속 고민하고 구글링하고 하다가 정리가 확실히 안되서 질문드립니다 ㅠ

우선 https://www.inflearn.com/questions/743070/provider 여기에 나와있는 답변을 바탕으로 어느정도 정리가 되었습니다.

하지만 여기서 드는 고민이 있습니다.

1. 그럼 LogDemoController,LogDemoService 는 @RequiredArgsConstructor 때문에 생성자에서 (두개의 클래스 안에 공통으로 있는) 필드ObjectProvider<MyLogger> myLoggerProvider를 주입받아야 되는데 ObjectProvider<MyLogger> myLoggerProvider는 .getObject()나오기 전까지 스프링컨테이너에 아무일도 안일어나는건가요??

  1. 1번이 맞다면 대기하였다가 이 .getObject()이 실행될때 해당 빈(Mylogger)을 찾아서 반환을 해주고 그때서야 스프링컨테이너에 LogDemoController,LogDemoService 이 두개의 빈이 등록되는건가요???

답변 1

0

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

안녕하세요. 코더님

결론부터 말씀드리면 아닙니다.

처음에 모두 스프링 컨테이너에 등록 됩니다. ObjectProvider는 스프링이 제공하는 특별한 장치라고 이해하시면 됩니다. 스프링은 ObjectProvider도 만들어서 주입을 해줍니다.

따라서 getObject()가 호출되지 않아도 빈은 다 등록되고 초기화도 모두 진행이 됩니다.

이후에 objectProvider.getObject()를 호출하면 스프링 컨테이너에서 관련 빈을 실제로 찾아오게 됩니다.

감사합니다.

코더님의 프로필 이미지
코더

작성한 질문수

질문하기