Spring

Bean의 Scope 중 싱글톤과 프로토타입의 차이

쿠카이든 2024. 4. 19. 12:35
728x90
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에 접근하려 할때 새로운 인스턴스를 생성한다.

참고 : https://atoz-develop.tistory.com/entry/Spring-%EB%B9%88%EC%9D%98-Scope-%EC%8B%B1%EA%B8%80%ED%86%A4%EA%B3%BC-%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85

 

[Spring] 빈의 Scope - 싱글톤과 프로토타입

[Spring] 빈의 Scope - 싱글톤과 프로토타입 빈을 등록할 때 아무런 설정을 하지 않으면 기본적으로 빈은 싱글톤 scope을 갖는다. 싱글톤 scope이란 어플리케이션 전반에 걸쳐 해당 빈의 인스턴스를 오

atoz-develop.tistory.com

 

728x90