작성
·
229
0
안녕하세요 계속 고민하고 구글링하고 하다가 정리가 확실히 안되서 질문드립니다 ㅠ
우선 https://www.inflearn.com/questions/743070/provider 여기에 나와있는 답변을 바탕으로 어느정도 정리가 되었습니다.
하지만 여기서 드는 고민이 있습니다.
1. 그럼 LogDemoController,LogDemoService 는 @RequiredArgsConstructor 때문에 생성자에서 (두개의 클래스 안에 공통으로 있는) 필드ObjectProvider<MyLogger> myLoggerProvider를 주입받아야 되는데 ObjectProvider<MyLogger> myLoggerProvider는 .getObject()나오기 전까지 스프링컨테이너에 아무일도 안일어나는건가요??
1번이 맞다면 대기하였다가 이 .getObject()이 실행될때 해당 빈(Mylogger)을 찾아서 반환을 해주고 그때서야 스프링컨테이너에 LogDemoController,LogDemoService 이 두개의 빈이 등록되는건가요???
답변 1
0
안녕하세요. 코더님
결론부터 말씀드리면 아닙니다.
처음에 모두 스프링 컨테이너에 등록 됩니다. ObjectProvider는 스프링이 제공하는 특별한 장치라고 이해하시면 됩니다. 스프링은 ObjectProvider도 만들어서 주입을 해줍니다.
따라서 getObject()가 호출되지 않아도 빈은 다 등록되고 초기화도 모두 진행이 됩니다.
이후에 objectProvider.getObject()를 호출하면 스프링 컨테이너에서 관련 빈을 실제로 찾아오게 됩니다.
감사합니다.