Skills/Spring

Spring - Bean Scope 관리

aoaa 2022. 9. 13. 22:15

1.  Bean Scope

 Spring은 Bean이라는 개념으로 객체를 만들고 SIngleton화 시켜 관리합니다. 

이 Bean으로 생성된 객체들은 Spring Container와 함께 시작되어서 종료될 때까지 Spring이 관리해주는데

이 이유는 Spring Bean들은 Singletone Bean으로 관리되기 때문입니다.

 

 그렇다면 빈 스코프는? 스코프(Scope)는 영어 뜻 그대로 범위인데 직역 그대로 Bean이 관리되는 범위를 의미합니다.

 

Spring이 가지는 Scope는 

  • 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프
  • 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다(따라서 빈 콜백중 종료메서드가 호출 X).
  • 웹 관련 스코프
    • request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다.
    • session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다.
    • application: 웹의 서블릿 컨텍스와 같은 범위로 유지되는 스코프이다.

로 구분됩니다.


2. 싱글톤 및 프로토타입 스코프 등록 방법

@Component
public class TestBean{
	...
}

 SIngleton Scope의 경우 위의 코드와 같이

@Component 로 등록을 해놓으면 디폴트 값이기 때문에

저렇게만 해놓아도 자동으로 등록되니 생략이 가능합니다. 

 

프로토타입 스코프의 경우에는 자동으로 등록되도록 하는 방법과 수동으로 등록되게 하는 방법이 있습니다.

 

2.1 프로토 타입 스코프 자동 등록하기

@Scope("prototype")
@Component
public class TestBean{
	...
}

자동 등록의 경우 @Scope로 해놓고 prototype을 명시해놓으면 됩니다.

 

2.2 프로토 타입 스코프 수동 등록하기

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

수동 등록의 경우에는 @Bean, @Scope를 명시한 다음 생성자로 PrototypeBean을 반환하면 됩니다.