본문 바로가기

SERVER/Spring

[Spring] Bean Scope의 종류

  • 스프링 빈은 기본적으로 싱글톤 스코프로 설정된다. 하지만 필요에 따라 비싱글톤이 필요한 경우도 많다. 스프링이 지원하는 Bean Scope의 종류에 대해 알아보자!

Scope의 종류

  • 싱글톤 스코프: 스프링에서 기본으로 설정되는 스코프. 스프링 컨테이너의 시작부터 종료까지 하나의 객체로 유지된다. 
  • 프로토타입 스코프: 스프링 컨테이너는 프로토타입 스코프의 생성과 의존관계 주입, 초기화까지만 관여한다. 이후로 더 관여하지 않고, 프로토타입을 받은 클라이언트가 객체를 관리해야 한다. 따라서 @PreDestroy 같은 종료 메소드가 호출되지 않는다. 또한 싱글톤과는 다르게 요청이 오면 계속 새로운 객체를 생성 후 반환한다. 

reqeust: 각각의 요청이 들어오고 나갈때까지 유지된다.

session: 세션이 생성되고, 종료될 때까지 유지된다.

application: 웹의 서블릿 컨텍스트와 같은 범위로 유지된다.  

 


Bean Scope 등록하기

1. 자동으로 등록

 

먼저 singletone scope의 경우 default값이기 때문에 별다른 scope 설정은 필요없다.

 

@Component 
public class singletoneBean{ 
     //생략 
}

 

 

그 외에는 @Scope("scope type name") 으로 설정해줄 수 있다.

 

@Scope("prototype")
@Component 
public class prototypeBean{ 
	//생략 
}

 

2. 수동으로 등록

 

@Scope("prototype") 
@Bean 
public class prototypeBean{ 
	PrototypeBean prototypeBean(){ 
		return new prototypeBean(); 
	} 
}

 

@Bean, @Scope 명시 후 생성자로 PrototypeBean을 반환해준다.