1. Bean Scopes
- 빈 정의를 통해 생성된 빈에게 의존성과 설정 값을 제어할 수 있을 뿐만 아니라, 객체의 생성 범위도 제어할 수 있습니다.
- 다양한 범위에서 객체를 생성할 수 있습니다.
The Singleton Scope (Default)
- 정확히 하나의 인스턴스만 생성합니다.
- 캐시에 저장됩니다.
- 각 IoC Container 들은 이 캐시된 객체를 반환합니다.
- 싱글톤 빈에 대한 모든 요청은 항상 동일한 공유 인스턴스를 반환합니다.
<bean id="accountService" class="com.something.DefaultAccountService"/>
<!-- the following is equivalent, though redundant (singleton scope is the default) -->
<bean id="accountService" class="com.something.DefaultAccountService" scope="singleton"/>
The Prototype Scope
- 빈 배포의 비싱글톤 형태로, 해당 빈에 대한 요청이 있을 때마다 새로운 빈 인스턴스가 생성됩니다.
- 다른 빈에 주입되거나 컨테이너에서 getBean() 메소드 호출을 통해 요청될 때마다 새 인스턴스가 만들어집니다.
- 상태를 가진 모든 빈들에 대해서는 프로토타입 범위를 사용합니다.
- Spring은 프로토타입 빈의 전체 생명 주기를 관리하지 않습니다.
- 컨테이너는 프로토타입 객체를 인스턴스화, 구성 및 조립한 후 클라이언트에 전달합니다.
- 그 이후로는 그 프로토타입 인스턴스에 대한 기록이 없습니다.
- 클라이언트는 프로토타입 범위의 객체를 정리하고 프로토타입 빈이 보유한 비용이 많은 자원을 해제해야 합니다.
- 파괴 생명 주기 콜백이 호출되지 않습니다.
<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>
Singleton Beans with Prototype-bean Dependencies
- 프로토타입 빈을 의존하는 싱글톤 빈을 사용할 경우, 의존성인 프로토타입 빈은 초기화 중에 주입됩니다.
- 싱글톤 빈이 런타임에 프로토타입 빈의 새 인스턴스를 얻고 싶다면 수정자 주입 등의 기타 방법을 사용해야 합니다.
출처
'Spring > Spring' 카테고리의 다른 글
[Spring][Core] 2-6. Bean: Autowiring Collaborators (0) | 2023.10.14 |
---|---|
[Spring][Core] 2-5. Bean: Dependency Injection (0) | 2023.10.14 |
[Spring][Core] 2-3. Bean: Naming Beans (0) | 2023.10.14 |
[Spring][Core] 2-2. Bean: Instantiating Beans (0) | 2023.10.14 |
[Spring][Core] 2-1. Bean: BeanDefinition (1) | 2023.10.14 |