inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 핵심 원리 - 기본편

스코프와 Provider

ObjectProvider의 getObject()가 request빈을 찾는 방법

276

YH

작성한 질문수 6

1

안녕하세요! 강의를보다 궁금한점이 생겨서 질문드립니다!

https://www.inflearn.com/questions/368066

이 질문글을 읽어보았는데요,

ObjectProvider를 통해 Controller 와 Service 어디에서 빈을 생성해도 같은 요청에 대해서 같은 빈을 찾아 반환해 준다는 점이 매우 신기했습니다.

그런데 동시에 ObjectProvider는 어떻게 Controller 에서 받은 요청으로 인해 생긴 MyLogger 빈을 Service 에서 같은 요청의 빈을 찾을 수 있는것인가! 에 대한 궁금증이 생겼습니다.

만약 100개의 요청이 동시에 들어왔다 치면, LogDemoService의 logic 메소드가 Controller에서 어떠한 파라미터도 받지않고 나머지 99개의 request 빈들을 무시하고 자신의 빈을 찾을 수 있는지 말입니다. 

 

그래서 질문의 결론은 제목처럼,

ObjectProvider는  수많은 Request 빈으로 부터 어떻게 하나의  요청에 대한 빈을 찾을 수 있는가 입니다.

질문 읽어주셔서 감사합니다!!!

 

 

spring oop

답변 1

3

David

안녕하세요. 이윤환님, 공식 서포터즈 David입니다.

.
처음 요청이 들어왔을 때, Request 스코프를 가진 빈(이하 R빈)을 찾으면 당연히 생성된 R빈이 없기 때문에 R빈을 생성합니다. 이렇게 생성된 R빈은 요청의 Attribute 저장공간에 이름을 key로하여 저장됩니다.

이후 해당 요청이 종료(응답될 때까지)되기 전까지 한 번 더 R빈을 호출하면 호출되는 빈의 스코프를 확인한 후 만약 Request 스코프면 요청의 Attribute 저장공간을 살펴보고 빈의 이름으로 저장된 빈이 있는지 확인합니다. 그리고 빈이 존재하면 그걸 반환합니다.

즉, 각 요청마다 Request 스코프로 생성된 빈을 들고 다닌다고 보시면 됩니다. 요청이 종료됨과 함께 사라지고요.

따라서 수많은 요청들 속에서 특정 빈을 찾아내는 것이 아니라, 현재 요청이 갖고 있는 attributes 속에서 특정 빈의 이름으로 빈을 가지고 있는지 확인하게 됩니다.

 

아래는 현재 요청의 Attributes 객체를 가져와서 저장된 Request 스코프를 가지는 빈이 있는지 찾는 로직입니다.

.
감사합니다.

SingletonService가 JVM이 뜰 때 생성되는게 맞나요?

0

29

1

섹션3. 11 회원객체 다이어그램

0

36

1

OCP, DIP과 @Qualifier 어노테이션에 대해서 질문합니다.

0

35

1

코드 자료

0

80

2

구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?

0

79

2

MemberService의 인터페이스를 왜 사용하는지 궁금합니다.

0

98

1

롬복 @Setter를 써야 하는 상황이 있는건가요?

0

104

1

빈 등록 메서드의 파라미터가 빈이 아니어도 되나요?

0

88

1

테스트 속도가 나중에 영향이 있을까요?

0

90

1

gradle 설정 안떠서 질문 남깁니다!

0

140

2

build.gradle로 프로젝트를 여는 이유

0

100

1

provider 사용하는 이유

0

97

1

다음 강의 뭘 들어야 할까요

0

139

2

프로토타입 빈, 직접 destroy 호출 안 할 경우

0

69

1

beanB

0

91

2

퀴즈다시풀기

0

75

1

Gradle로 바꿔도 오류가 똑같이 발생하네요 ㅠㅠ

0

102

2

"중복 등록과 충돌" 강의에서 강사님과 다른 에러가 발생합니다.

0

71

3

run 실행했는데 결과창이 이렇게 뜨네요 왜 그런건가요>

0

112

2

도메인의 정의?

0

63

1

ApplicationContext 질문입니다.

0

68

1

@Scope의 proxyMode를 사용할때 단위 테스트 방법

0

98

2

ai api 선정하기 관련 질문

0

133

2

생성자 자동주입 관련해서

0

68

1