스프링5; Prototype 범위

🗓️

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을 사용할때는 소멸 코드를 꼭 관리해야한다.