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에 접근하려 할때 새로운 인스턴스를 생성한다.
[Spring] 빈의 Scope - 싱글톤과 프로토타입
[Spring] 빈의 Scope - 싱글톤과 프로토타입 빈을 등록할 때 아무런 설정을 하지 않으면 기본적으로 빈은 싱글톤 scope을 갖는다. 싱글톤 scope이란 어플리케이션 전반에 걸쳐 해당 빈의 인스턴스를 오
atoz-develop.tistory.com
'Spring' 카테고리의 다른 글
(@Scheduled 관련) 스케쥴러 관련 메소드안에 JPA 저장하는 메서드가 같이 있을 경우 저장이 안되는 오류 (0) | 2023.08.24 |
---|---|
@Controller와 @RestController의 차이점 (0) | 2023.03.05 |
PointCut 표현식 정리 (0) | 2023.03.03 |
(스프링 고급편) 스프링 AOP (0) | 2023.03.02 |
SpringBoot + Mybatis 연동하기 (0) | 2023.01.12 |