인프런 커뮤니티 질문&답변
ApplicationContext 질문입니다.
작성
·
25
·
수정됨
0
new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class)해당 코드에서 질문 있습니다.
이렇게 클래스를 넣어주면 해당 클래스는 컴포넌트 스캔의 대상처럼 되어 빈으로 등록된다고 앞의 강의들에서 말씀하셨는데요.
ClientBean은 싱글톤 빈(기본 값)이므로 우리가 여태 했던 것처럼 그대로 스프링 컨테이너에 객체가 생성되어 스프링 빈으로 등록될 것 같은데요.
PrototypeBean 클래스는 어떻게 되는지 궁금합니다.
프로토 타입빈은 설명하신 것에 따르면 요청(조회) 할 때 빈이 생성되어 반환된다고 하셨는데요,
그렇다면 AnnotationConfigApplicationContext에 PrototypeBean을 보내면 어떤 상태(?)로 있는 건가요?
프로토타입 빈은 요청시에 빈이 생성되어 반환되니까 싱글톤 빈처럼 스프링 컨테이너에 빈으로 등록된 상태는 아닐 것 같구요.
그냥 스프링 빈으로 만들어 질 수 있는 상태 같은 것이 되는건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
yoon6669님,
AnnotationConfigApplicationContext를 사용하여 PrototypeBean 클래스를 빈으로 등록하는 경우, 다음과 같은 동작 원리를 가집니다.
ClientBean과 같은 싱글톤 빈은 컨테이너가 시작할 때 인스턴스가 생성되어 스프링 컨테이너에 빈으로 등록됩니다. 반면에 PrototypeBean과 같은 프로토타입 빈은 요청이 있을 때마다 새로운 인스턴스가 생성됩니다.
따라서 PrototypeBean도 스프링 컨테이너에 빈으로 등록은 되지만, 싱글톤 빈과는 달리 인스턴스가 즉시 생성되지 않습니다. 빈의 정의는 스프링 컨테이너에 등록이 되어 있지만, 실제 인스턴스는 빈을 요청할 때마다 생성되고 소멸됩니다. 그렇기에 PrototypeBean도 스프링 컨테이너의 관리 대상이 되지만, 인스턴스 관리 방식에서 차이가 있습니다.
이해를 돕기 위해 공식 문서 링크를 참고하실 수 있습니다:
Spring Boot Reference Documentation v3.1.5 - Web Environment
도움이 되셨길 바랍니다!





