• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

섹션 9 - 빈 스코프의 Singleton에서 Prototype을 사용할 때 관리주체는?

24.01.15 10:38 작성 조회수 107

1


프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결

위 강의에서는 Singleton Bean에서 필드 객체로 Prototype를 사용해야 할 경우를 알려주고 있는데,

 

이전 강의에서는 Prototype의 관리 주체는 Di를 통해 가져올 경우 Spring Container라고 했으나,

결국 Bean에서 Dependency Lookup을 통해 객체를 생성할 경우 관리 주체는 Prototype이기 때문에 개발자가 Prototype Bean의 관리주체가 된다고 했습니다.

 

이 때, Spring Container가 아닌 개발자가 직접 Prototype Bean을 관리한다는 것은 어떤것인지, 그리고

실제 Prototype Bean을 관리하는 상황을 몇가지 듣고싶습니다.

 

 

답변 2

·

답변을 작성해보세요.

2

안녕하세요. mjnsoo c님

Prototype Bean을 조회하는 경우 이 빈이 사용하는 자원이 있을 수 있습니다. 예를 들어서 외부 네트워크와 연결했다면 연결을 끊어주어야 하는데요.

스프링 컨테이너가 관리하는 싱글톤 빈의 경우 close()를 스프링 컨테이너가 라이프사이클에 맞추어 호출해줍니다.

반면에 Prototype Bean은 close()를 개발자가 직접 호출해주어야 합니다.

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.15

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

질문하신 내용에 관해 몇 가지 유사한 질문과 그에 대한 답변이 있어 이를 공유드립니다.

제목: 프로토타입 빈에 대한 질문
내용: 이 질문에서는 프로토타입 빈의 필요성과 스프링 컨테이너에 의한 관리에 대해 질문하였습니다. 프로토타입 빈이 스프링 컨테이너에 의해 생성되고 의존 관계 주입 후 관리되지 않으며, 종료 시점에 대한 처리는 개발자가 직접 담당해야 한다는 내용의 답변이 제공되었습니다.

제목: 프로토타입 스코프 빈의 스프링 빈 저장소에서의 상태
내용: 프로토타입 스코프 빈이 스프링 컨테이너에 의해 요청 시마다 새로 생성되며 컨테이너가 빈의 생명주기를 관리하지 않는다는 설명이 답변에 포함되어 있습니다.

제목: ObjectProvider 사용하는 대신에 prototype 객체가 singleton 객체를 주입 받으면 안되나요?
내용: 싱글톤 객체와 프로토타입 객체의 관계에서 프로토타입 스코프 객체를 매번 새로 생성하는 ObjectProvider 사용에 대한 이유와 대안적인 접근 방식에 대한 질문입니다. 답변에서는 프로토타입 빈의 특성과 Provider 사용 방법을 강의 내에서 다루기 위한 코드 구성 배경이 설명되어 있습니다.

프로토타입 빈은 스프링 컨테이너에 의해 생성 및 의존 관계가 주입된 후에는 개발자가 직접 관리해야 하는 객체입니다. 즉, 프로토타입 빈은 스프링 컨테이너에 의해 관리되는 빈의 생명 주기(공통 관심사, 특정 규약에 따른 초기화 및 종료 처리)에서 벗어나고, 개발자는 이 객체들을 사용하고 관리하는 책임(참조 관리, 생명 주기 관리 등)을 가지게 됩니다.

싱글톤 빈이 프로토타입 빈을 사용할 경우, 프로토타입 빈의 개별 인스턴스 별로 초기화, 사용, 그리고 필요한 경우 수동으로 소멸 등의 생명 주기를 관리해야 할 수도 있습니다. 예를 들어, 프로토타입 빈의 인스턴스가 어떤 상태를 가질 경우, 그 상태를 변결하거나 소멸시키는 로직을 개발자가 직접 구현해야 할 수 있습니다. 이런 경우, 스프링에서 제공하는 ObjectProvider, JSR-330 Provider 등을 사용하여 프로토타입 빈을 제공 받을 수 있고, 이렇게 제공 받은 인스턴스는 클라이언트 코드에서 관리해야 합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.