Prototype
- 스프링 컨테이너는 기본적으로 bean객체를 생성 할 떄 싱글톤으로 생성한다.
- 그러나 여러개의 인스턴스가 필요한 경우 prototype으로 scope를 지정하면 된다.
프로토타입 범위 지정
- bean설정에서 scope에 속성으로 지정하면 된다. 아래 코드 참고.
@Bean
@Scope("prototype") // <<<<<
public Client client() {
Client client = new Client();
client.setHost("host");
return client;
}
- 그리고 아래 코드를 실행 하면 false가 반환된다.
Client client1 = ctx.getBean(Client.class);
Client client2 = ctx.getBean(Client.class);
System.out.println("client1 == client2 : " + (client1 == client2));
프로토타입 주의사항
- 프로토타입 범위를 갖는 bean은 완전한 라이프사이클을 따르지 ㅇ낳는다.
- 컨테이너 생성시 초기화 작업까지는 하지만 컨테이너 를 소멸하는
close()
작업시 bean객체의 destroy()
를 실행하지 않는다. - 그래서 프로토타입 bean을 사용할때는 소멸 코드를 꼭 관리해야한다.