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

hello님의 프로필 이미지
hello

작성한 질문수

스프링 핵심 원리 - 기본편

스코프와 Provider

myLogger Provider 질문

작성

·

174

1

안녕하세요 강의 듣다가 이해가 확실히 안가는 부분이 있어서 질문 드립니다. 7분 10초 부분인데요

ObjectProvider가 원래는 프로토타입으로 생성해서 주니 요청할 때마다 다른 객체를 받아야하지만 Scope("request")로 설정해준 MyLogger의 경우에는 특이하게 같은 request내에서는 같은 객체가 반환 된다는 말씀이신가요?

답변 1

2

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

안녕하세요. wel come님

ObjectProvider는 프로토타입을 생성해주는 것이 아니라, 빈을 찾아오는 역할을 합니다.

따라서 해당 시점에 applicationContext.getBean("myLogger")을 해서 빈을 찾아옵니다.

만약 찾은 빈이 싱글톤 스코프라면 기존에 싱글톤으로 생성되어 있는 빈을 반환해주십니다.

그런데 myLogger가 request 스코프 이기 때문에 request 스코프에 빈이 없으면 새로 생성하고, 이미 있으면 있는 빈을 반환해줍니다.

감사합니다.

아하! ObjectProvider는 getObject();시에 프로토타입빈을 계속해서 생성을 하는것이 아니라 없으면 생성해서 가져오고 있으면 있는것을 가져오는 것이었군요!

이제서야 왜 LogDemoController 와LogDemoService에 각각 myLoggerProvider.getObject() 해주었는데도

uuid가 동일한 값으로 생성되는지 이해가 되었어요!

hello님의 프로필 이미지
hello

작성한 질문수

질문하기