모든 Bean은 관리되는 범위(scope)를 가지고 있다.
Spring 컨테이너는 기본적으로 Bean을 싱글턴(singleton)으로 관리하지만 다른 범위를 설정할 수도 있다.
Spring에서 사용할 수 있는 Bean 범위는 다음 6가지다.
범위 | 설명 | 비고 |
---|---|---|
singleton | 단일 인스턴스 공유 | 기본값 |
prototype | 매번 새 인스턴스 생성 | |
request | HTTP 요청의 수명주기 | 웹 컨텍스트에서만 사용 가능 |
session | HTTP 세션의 수명주기 | 웹 컨텍스트에서만 사용 가능 |
application | ServletContext 의 수명주기 | 웹 컨텍스트에서만 사용 가능 |
websocket | WebSocket 의 수명주기 | 웹 컨텍스트에서만 사용 가능 |
@Scope
로 범위 설정하기config 클래스에서 Bean 메서드에 @Scope
어노테이션을 달고 범위를 나타내는 문자열을 값으로 전달하면 Bean의 범위를 설정할 수 있다.
@Configuration
public class AppConfig {
@Bean
@Scope("singleton")
public SingletonBean singletonBean() { ... }
@Bean
@Scope("prototype")
public PrototypeBean prototypeBean() { ... }
...
}