스프링 빈은 스프링에서 관리하는 객체를 뜻한다. 스프링 빈은 설정하는 값에 따라 스프링 컨테이너에서 빈을 관리하는 주기를 설정할 수 있는데, 이번에는 그 중에서도 가장 대표적인 두가지 Prototype과 Singleton의 차이에 대해서 알아보도록 하자.
| Prototype | Singleton | |
|---|---|---|
| 객체 | 컨테이너에 여러 개의 빈이 있을 수 있음 | 컨테이너당 하나의 빈만 존재 |
| Bean | 빈이 참조될 때마다 새로운 빈을 생성 | 이미 생성된 빈을 재사용 |
| 기본값 | X | O |
| 적용방법 | @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) | 따로 명시하지 않아도 됨 @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) |
| Recommended for | 내가 작성한 코드를 빈으로 등록할 때 대부분의 경우 @Component가 권장됨 | 1: 특정 비즈니스 로직을 생성할때 2: 제3자 라이브러리 bean을 인스턴스화 할 때 |
| 사용빈도 | 가끔 사용 | 대부분 사용 |
| 상황에 따른 적용 | 사용자 정보가 유지되는 Bean을 생성할 때 | 정보가 Stateless(유지되지 않는) Bean을 생성하고자 할 때 |
자바에서 말하는 싱글톤과 스프링에서 말하는 싱글톤은 무엇이 다른걸까?
대부분의 경우 JVM 하나에는 하나의 Spring 컨테이너가 실행되기 때문에 대부분의 경우 둘이 말하는 싱글톤은 다를바가 없다.
다만, 만약에 JVM에 둘 이상의 Spring컨테이너가 실행되고 있다면 Java Singleton과 Spring Singleton은 달라진다.
하지만 말했듯이 대부분의 경우 하나의 jvm에 하나의 spring컨테이너만 실행하게 되므로 참고만 하자.