스프링은 기본적으로 모든 bean을 singleton으로 생성하여 관리한다.
- 구체적으로는 애플리케이션 구동 시 JVM안에서 스프링이 bean마다 하나의 객체 생성 의미
- 그래소 우리는 스프링을 통해서 bean을 제공받으면 언제나 주입받은 bean은 동일한 객체하는 가정하에서
개발을 해야 한다.
request , session , global session 의 scope는 일반 spring 애플리케이션이 아닌, spring MVC 에서만 사용
1. Singleton
-싱글톤 bean은 Spring 컨테이너에서 한번 생성된다.
컨테이너가 사라질때 bean도 제거
-생성된 하나의 인스턴스는 single bean cache에 저장되고, 해당 bean에 대한 요청과 참조가 있으면 캐시된 객체 반환
즉, 하나만 생성되기 때문에 동일한 것을 참조
-기본적으로 모든 bean은 scope이 명시적으로 적어 주지 않는다면 singleton이다.
<bean id="messageBean" class="sample03.MessageBeanKo" scope="singleton"></bean>
2.Prototype
-prototype bean은 모든 요청에서 새로운 객체를 생서성하는 것을 의미한다.
즉, prototype bean은 의존성 관계의 bean에 주입 될때 새로운 객체가 생성되어 주입된다.
정상적으로 garbage collection
<bean id="messageBean" class="sample03.MessageBeanKo" scope="prototype"></bean>
참고
싱글톤으로 적합한 객체
- 상태가 없는 공유 객체
- 읽기용으로만 상태를 가진 공유 객체:
- 공유가 필요한 상태를 지닌 공유 객체:
- 쓰기가 가능한 상태를 지니면서도 사용빈도가 매우 높은 객체
비싱글톤으로 적합한 객체
- 쓰기가 가능한 상태를 지닌 객체
- 상태가 노출되지 않은 객체
'Spring Framework > study' 카테고리의 다른 글
DAO 패턴은 왜 그렇게 생겼나? (0) | 2020.03.29 |
---|---|
Spring 트랜잭션 처리 @Transactional (0) | 2020.03.07 |
DI(Dependency Injection) ? (0) | 2019.12.23 |
IoC Container ? (0) | 2019.12.23 |
테스트 (0) | 2019.12.20 |