Tech/Spring

[스프링 핵심 원리] 프로토타입 스코프

0m1n 2022. 2. 2. 13:41
728x90
반응형

싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다. 반면 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다.

 

  • 스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계 주입, 초기화까지만 처리한다.
  • 클라이언트에 빈을 반환하고, 이후 스프링 컨테이너는 프로토타입 빈을 관리하지 않는다.
  • 따라서 프로토타입 빈을 관리할 책임은 빈을 받은 클라이언트에 있다.
  • 그래서 @PreDestory 같은 종료 메서드가 호출되지 않는다.

프로토타입 스코프 빈을 조회하는 prototypeBeanFind()를 실행하면 아래와 같은 결과가 나온다.

@Scope("prototype")
find prototypeBean1
PrototypeBean.init
find prototypeBean2
PrototypeBean.init
prototypeBean1 = hello.core.scope.PrototypeTest$PrototypeBean@1e461e41
prototypeBean2 = hello.core.scope.PrototypeTest$PrototypeBean@5ba88be8
  • 프로토타입 빈을 2번 조회해 완전히 다른 스프링 빈이 생성되고, 초기화도 2번 실행되었다.
  • 프로토타입 빈은 스프링 컨테이너가 생성 / 의존관계 주입 / 초기화 까지만 관여하고, 더는 관리하지 않는다.
  • 그래서 @PreDestory 같은 종료 메서드가 호출되지 않는다.
728x90
반응형