1. 프로토타입 스코프
- 프로토타입 스코프의 빈은 요청하면 항상 새로운 객체 인스턴스를 만들어서 반환합니다.
- 클라이언트가 스프링 컨테이너에 프로토타입 빈을 요청합니다.
- 스프링 컨테이너는 프로토타입 빈을 새로 생성해서 반환합니다.
- 클라이언트는 반환 받은 빈의 count값을 1 증가시켜줍니다.
또다른 클라이언트가 요청을 보내면?
마찬가지로 @x02 프로토타입 빈의 카운트 또한 1이 될 것입니다.
2. 싱글톤 빈에서 프로토타입 빈을 생성하여 사용
- 위의 사진을 보고 다음과 같은 상황을 가정하겠습니다.
- 클라이언트 빈에서 프로토타입 빈을 요청합니다.
- 반환 받은 프로토타입 빈은 싱글톤 빈이 관리합니다.
- 클라이언트가 클라이언트 빈에서 logic() 메서드를 호출합니다.
- logic 메서드는 카운트를 1 증가시킵니다.
- 클라이언트 빈은 프로토타입 빈의 addCount()메서드를 호출해서 카운트값을 1 증가시킵니다.
3. 정리
- 이미 싱글톤 빈이 프로토타입 빈을 받아서 계속 가지고있는 상태입니다. 새로 만들어진 빈이 아니기때문에 logic 메서드를 여러번 호출하면 프로토타입 빈을 새로 만드는것이 아니라 싱글톤 빈에서 관리되고있는 프로토타입 빈을 호출하기때문에 값이 계속 증가하게됩니다.
- 클라이언트 빈을 두개 만들어서 하는 방법은 있겠지만 그럼 코드가 너무 지저분해집니다.
- 위와같은 경우 그냥 싱글톤 빈으로 해결을 하지, 굳이 프로토타입 빈을 쓰지않습니다.
[참고 문헌]
[1] 인프런 : 김영한 강사님 – 스프링 핵심 원리 – 기본편