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
반응형
'Programing > Spring FrameWork' 카테고리의 다른 글
[Spring] ApplicationContext - MessageSource (0) | 2021.07.27 |
---|---|
[Spring] EnvironmentCapable - profile (0) | 2021.07.27 |
[Spring] 해당 타입의 빈이 여러개인 경우 (0) | 2021.07.20 |
[Spring] Bean 주입방법 비교(xml vs Java) (0) | 2021.07.13 |
[Spring] PSA ( Portable Service Abstraction ) (0) | 2021.01.18 |