728x90
빈 스코프란?
스코프는 빈이 존재할 수 있는 범위를 뜻함
종류
Scope | Description |
singleton | (기본값) 스프링 IoC 컨테이너 당 하나의 인스턴스만 사용 앱이 구동되는 동안 하나만 사용 |
prototype | 매번 새로운 빈을 정의해서 사용 |
request(Web) | HTTP 라이프사이클마다 한 개의 빈을 사용(웹 요청이 들어오고 나갈 때까지) Web-Aware ApplicationContext에서만 사용 가능 |
session(Web) | HTTP 세션마다 하나의 빈을 사용(웹 세션이 생성되고 종료될 때까지) Web-Aware ApplicationContext에서만 사용 가능 |
application(Web) | ServeltContext 라이프사이클 동안 한 개의 빈만 사용 Web-Aware ApplicationContext에서만 사용 가능 |
websocket(Web) | websocket 라이프사이클 안에서 한 개의 빈만 사용 Web-Aware ApplicationContext에서만 사용 가능 |
Prototype Bean 주의 사항
싱글톤 스코프의 빈이 프로토타입의 빈을 주입 받는 경우
싱글톤 스코프의 빈이 생성되고 의존 관계가 주입되는 시점에만 프로토타입 빈이 조회되고, 이후에는 계속 같은 빈이 사용
이 문제점을 해결하려면!
proxy mode 사용
@Component
@Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class ProtoType {
}
ObjectProvider 객체 사용
@Component
public class Single {
@Autowired
ObjectProvider<ProtoType> protoType;
public ProtoType getProtoType() {
return protoType.getIfAvailable();
}
}
그럼 언제 Prototype Bean을 사용하나요?
- 여러 인스턴스를 검색해야 하는 경우
- 인스턴스를 지연해야 되거나 선택적으로 찾아야 하는 경우
- 순환 종속성을 깨기 위해서
- 스코프에 포함된 인스턴스로부터 더 작은 범위의 인스턴스를 찾아 추상화하기 위해
'CS' 카테고리의 다른 글
[CS] Spring MVC (0) | 2024.05.01 |
---|---|
[CS] Spring Framework (1) | 2024.05.01 |
[CS] Spring PSA (1) | 2024.05.01 |
[CS] Spring Interceptor (0) | 2024.04.30 |
[CS] Spring Filter (0) | 2024.04.30 |