Bean의 Scope는 기본적으로 싱글톤이다. 프로그램 구동시 Bean의 인스턴스는 오직 하나라는 뜻이다.
Bean이 가질수 있는 Scope 는 싱글톤 외에 매번 인스턴스를 새로 생성하는 ProtoType 도 있다.
만약, 프로토 타입 빈이 싱글톤 빈을 참조하면 어떻게 될까?
매번 프로토타입의 빈은 새로운 인스턴스로 생성되고, 그 인스턴스들이 바라보는 싱글톤 빈은 동일한 인스턴스일 것이다.
이럴 때는 아무런 문제가 되지 않는다.
그렇다면, 싱글톤 빈이 프로토 타입 빈을 참조하면 어떻게 될까?
싱글톤이 생성 된 이후에 프로토타입 빈이 변경이 되어도 해당 내용이 업데이트가 되지 않는다.
이를 업데이트하려면
Scoped-proxy값을 설정해주거나, 참조시 참조 객체를 Object-Provider 리스트로 감싸주면 된다.
// #1. protoType의 Bean에 proxyMode를 클래스모드로 설정해준다.
@Component
@Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class Proto{
}
// #2. SingletonType의 Bean에서 Prototype의 객체를 ObjectProvider로 감싸준다.
@Component
public class Single{
@Autowired
private ObjectProvider<Proto> proto;
public Proto getProto(){
return Proto.getIfAvailable();
}
}
'Study > Spring' 카테고리의 다른 글
스프링 핵심기술 05. 추상화 (0) | 2022.02.13 |
---|---|
스프링 핵심기술 04. ApplicationContext가 상속받는 인터페이스들 (0) | 2022.02.06 |
스프링 핵심기술 02. 스프링 IoC 컨테이너 - @Autowire (0) | 2022.02.02 |
스프링 핵심기술 01. 스프링 IoC 컨테이너 - ApplicationContext와 Bean 설정 방법 (0) | 2022.02.02 |
토비의 스프링 01. 오브젝트와 의존 관계 (0) | 2021.12.15 |