Contents
-
bean의 스코프 종류
-
proxyMode?
-
singleton 의 주의사항
빈의 스코프
빈에는 스코프라는게 있다.
스코프의 종류
- 싱글톤
- 프로토타입
- Request
- Session
- WebSocket
빈의 default는 싱글톤이다.
싱글톤 - 해당 빈의 인스턴스가 오직 1개 뿐이다.
프로토 - 새로운 인스턴스를 계속 만들어서 사용하는 스코프
프로토타입의 객체를 찍어보면 계속 다른 객체가 나온다.
*주의할점
ProtoType 의 객체에서 싱글톤 객체를 참조할때는 아무런 문제 없다.
하지만, 반대의 경우엔?
이 경우엔 문제가 있을 수 있다.
최초 한번만 만드는 객체라 안에있는 proto가 계속 동일한 객체를 가지게 된다.
이 문제를 해결하기 위한 방법으로는 proxyMode 를 쓸 수 있다.
기본값으로는 ScopedProxyMode.Default 로 사용하지 않고 있다가 TARGET_CLASS 로 변경 했다.
proxyMode
proxy를 쓴다는건
이 Proto 클래스를 proxy로 감싸라 라는 것 (위와 같은 경우엔 CLASS 기반의 proxy로 감싸라)
왜 proxy로 감싸야 하나?
저 Single 클래스가 Proto 를 직접 참조하면 안되기 때문이다.
Proxy를 거쳐서 쓰게 하기위해 사용한 거라고 할 수 있다.
직접쓰면 매번 새로운 객체로 바꿔 줄 수가 없다
이 proxy 패턴은 뒤에 AOP 에서 좀 더 상세하게 보도록 하자.
싱글톤 사용시 주의 사항
클래스 안에 필드 값이 있다면
ex) int value = 0;
이건 스레드 세이프 하지 않기 때문에
멀티 스레드 환경에서 값이 보장 되지 않는다.
지역 변수로 쓰거나 해서 값을 스레드 세이프 하게 보장해야 된다.
'Spring > Core' 카테고리의 다른 글
Spring Core - Validation, Data binding 추상화 (0) | 2020.04.18 |
---|---|
Spring Core - Resource 추상화 (0) | 2020.04.18 |
Spring Core - Application Context 의 기능들 (0) | 2020.04.17 |
Spring Core - Annotation (0) | 2020.04.16 |
Spring Core - IOC 컨테이너와 빈 (0) | 2020.04.16 |