• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

스프링 컨테이너와 빈 스코프

24.01.04 19:00 작성 조회수 180

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]스프링 컨테이너가 사용되면, 스프링 구성정보(Configuration) 을 활용해서 아래처럼 스프링 빈 저장소에 빈 이름과 빈 객체가 저장된다고 배웠는데요. 싱글톤 컨테이너의 경우에는 AppConfig 파일에서 @Bean으로 수동등록된 것이나, 혹은 컴포넌트 스캔을 통하여 스프링 컨테이너에 객체를 생성하여 등록하는 것으로 알고 있습니다.

그런데 프로토타입 스코프와 웹 스코프의 경우에는 스프링 빈 저장소에 빈 객체의 주소값을 저장하는지 궁금합니다.예를 들어, 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환하는데, 그럼 스프링 컨테이너가 생성되는 시점에서 ' 빈 이름 ' 만 등록되고, 빈 객체는 생성되지 않은 채 주소값이 등록되지 않는 것일까요??
같은 맥락으로, 웹 스코프에서 request scope은 HTTP 요청이 들어오고 나갈 때까지만 유지되는 스코프입니다.@Component @Scope(value = "request") public class MyLogger {
.. }
MyLogger 클래스는 위처럼 @Component 로 되어 있기 때문에 컴포넌트 스캔의 대상인데, 그러면 스프링 컨테이너에 등록 될 때 빈 이름만 등록되고 객체는 생성되지 않은 채 등록되는 것일까요?그리고 이후에 @Controller @RequiredArgsConstructorpublic class LogDemoController { private final MyLogger myLogger;... }LogDemoController에서 의존관계 주입으로 MyLogger가 필요할 때, 그 때 비로소 객체가 생성되어서 스프링 컨테이너에 등록되어야 하는데, request scope이기 때문에 오류가 났던 것인가요?? 답변 주시면 감사하겠습니다.

답변 2

·

답변을 작성해보세요.

1

David님의 프로필

David

2024.01.05

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

  1. 빈 메타데이터라는 게 있습니다. 이 정보를 가지고 있다가 필요할 때 빈을 생성하게 되고 생성된 빈은 스코프에 따라 컨테이너에서 보관할지 호출된 쪽으로 반환할지를 결정합니다.

빈 메타데이터에 대한 부분은 본 강의의 스프링 빈 설정 메타 정보 - BeanDefinition편을 참고해 주세요.

  1. Request 스코프 빈은 요청이 들어왔을 때만 생성이 가능합니다. 요청이 들어오지 않은 상태인데 생성을 시도해서 오류가 발생한 것입니다.

감사합니다🙂

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.04

안녕하세요, 인프런 AI 인턴입니다.

pbs0216님의 질문과 유사한 내용으로 설명되어 있는 게시물을 찾았습니다. 프로토타입 스코프 빈의 경우 스프링 컨테이너가 생성된 이후, 스프링 빈 저장소에 빈 이름만 있고, 빈 객체는 비어 있으며 요청이 와야 객체를 생성하여 클라이언트에게 반환하는 것에 대해 궁금해 하셨던 다른 수강생의 질문에 대한 답변을 참고하시면 도움이 될 것 같습니다.

게시글 제목: “프로토타입 스코프 빈의 스프링 빈 저장소에서의 상태”
링크: 프로토타입 스코프 빈의 스프링 빈 저장소에서의 상태

이 답변을 통해 pbs0216님의 궁금증을 해소할 수 있기를 바랍니다.