1. 기본적으로 스프링빈의 scope는 싱글톤
2. 스프링 환경은 멀티 스레드
3. 스프링빈은 기본적으로 스레드세이프하지 않다!⭐️
그럼 문제가 생기지 않을까?
기본적으로 스프링빈은 스레드세이프하지 않다.
다만 불변 객체를 통해 변화를 방지함으로써 스레드세이프하게 작동하도록 코드를 짠다
⭐️대표적인 예시가 바로 생성자 주입이다.
생성자 주입을 통해 우리는 불변을 도모하도록 코드를 작성한다.
문제 상황
@Component
public class Aservice{
int value = 0;
public int edit(int otherValue){
value +=otherValue;
return value;
}
}
지금 이 상황은 스레드세이프하지 못한 빈에 수정 가능한 변수가 존재
동시에 여러곳에서 접근할 수 있는 public한 상황
이러한 경우가 바로 문제가 생길 수 있는 상황이다.
프로토타입 scope
기본적으로 스프링의 scope는 싱글톤이지만
prototype을 사용한다면 매 요청시마다 새로운 객체가 생성되어처리
다만 매 요청시마다 새로운 객체를 생성한다는것 자체가 큰 단점이기때문에 주의해서 사용할것
스레드 세이프란
스프링빈은 스레드 세이프할까?
그럼 문제가 생기지 않을까?
문제 상황
프로토타입 scope