본문 바로가기

Programing/Spring FrameWork

[Spring] Bean의 Scope ( 싱글톤 vs 프로토타입 )

728x90
반응형

[Spring] Bean의 Scope ( 싱글톤 vs 프로토타입 )


Scope: Bean Object가 생성되어 존재할 수 있는 범위

 

1. 싱글톤(Singleton) Scope

 

아무런 설정을 하지 않으면 기본적으로 싱글톤 Scope를 가지며, Property가 공유된다.

DI DL 시 매번 같은 Object가 사용된다.

싱글톤 Scope를 가지는 Bean이 많아지면 어플리케이션 구동 시 등록될 Bean의 수가 많아짐으로 구동속도가 느려지게 된다.

 

등록방법

-> @Component Annotation 사용 시, 기본적으로 싱글톤 Scope을 가지는 Bean으로 등록된다.

 

2. 프로토타입(Prototype) Scope

 

싱글톤 Scope과 달리 DI DL 시 매번 새로운 Object가 사용된다.

 

등록방법

-> @Component Annotation과 더불어 @Scope("prototype") Annotation을 추가하여  Scope를 지정해준다.

 

참조 문제점

 

1) Prototype Bean이 Singleton Bean을 참조하는 경우: 문제 X

 

2) Singleton Bean이 Prototype Bean을 참조하는 경우

-> Singleton Bean이 생성되는 시점에 주입된 Prototype Bean이 update 되지 않는다.

이는 Prototype Bean으로써의 기능을 상실하게 되어 문제가 발생한다.

 

해결방법

-> Prototype Bean의 Scope Annotation에 proxyMode option을 추가한다. 

@Component @Scope(scopeName = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
// proxyMode 속성의 기본값은 ScopedProxyMode.DEFAULT로 proxyMode를 사용하지 않음을 의미한다.
public class Proto {
}

 

Prototype Bean을 Proxy로 감싸주어 Prototype Bean에 접근하려 할때 새로운 인스턴스를 생성한다.

728x90
반응형