스프링

프로토타입 스코프

salmon16 2023. 7. 24. 23:55

빈 스코프란 이름 그대로 빈이 존재할 수 있는 범위를 뜻한다.

 

우리는 지금까지 컨테이너의 시작과 종료까지 유지되는 스코프를 가지는 싱글톤에 대해서 공부를 했다.

하지만 프로토타입이라는 스프링 컨테이너가 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 스코프를 가지는 프로토 타입 빈이라는 것도 있다. 

 

빈 스코프는 @Scope애노테이션을 이용해서 지정할 수 있다.

기본 디폴트 값은 singleton이다.

프로토타입은 다음과 같이 지정할 수 있다.

@Scope("prototype")
@Bean
PrototypeBean HelloBean() {
	return new HelloBean();
}

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

 

프로토타입 스코프의 빈이 생성되는 과정을 보자.

1. 클라이언트가 프로토타입 스코프의 빈을 스프링 컨테이너에 요청한다.

2. 스프링 컨테이너는 이때 프로토타입 빈을 생성하고, 필요한 의존관계를 주입한다.

3. 스프링 컨테이너는 생성한 빈을 클라이언트에 반환하고 반환한 빈은 관리하지 않는다.

3. 이 후 클라이언트의 요청이 또 오면 1~3번 과정을 반복한다.

프로토타입 스코프 빈은 반환 후 스프링 컨테이너에서 관리하지 않기 때문에 @PreDestroy 같은 종료 메서드는 동작하지 않는다.

 

출처 : 인프런 스프링 핵심 원리 - 기본 편  김영한