해결된 질문
작성
·
262
0
@Test
void singletonClientUsePrototype() {
AnnotationConfigApplicationContext ac = new
AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class);
}
static class ClientBean {
private final PrototypeBean prototypeBean;
@Autowired
public ClientBean(PrototypeBean prototypeBean) {
this.prototypeBean = prototypeBean;
}
}
이 코드에서
new
AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class);
이때 ClientBean은 싱글톤이어서 스프링 컨테이너에 생성되고 PrototypeBean은 프로토타입이라 생성되지 않습니다. (조회시점에 생성되므로 - getBean)
static class ClientBean {
private final PrototypeBean prototypeBean;
@Autowired
public ClientBean(PrototypeBean prototypeBean) {
this.prototypeBean = prototypeBean;
}
}
하지만 여기서 (의존관계 자동주입 시점)에 스프링컨테이너에 프로토타입빈을 요청하면 스프링컨테이너는 프로토타입빈을 생성해서 반환합니다.
반환된 프로토타입빈을 ( 클라이언트 빈의 생성자를 통해) this.prototypeBean=prototypeBean; 에 의해서 내부필드에 주입되어서 보관합니다.
라고 이해를 했는데 맞는지 궁금합니다.
답변해주시면 정말 감사하겠습니다.