Spring/Spring

[Spring][Core] 2-4. Bean: Scopes

noahkim_ 2023. 10. 14. 18:19
  • 빈 정의를 통해 생성된 빈에게 의존성과 설정 값을 제어할 수 있을 뿐만 아니라, 객체의 생명 주기도 제어할 수 있습니다.
  • 다양한 범위에서 객체를 생성할 수 있습니다.

 

1. 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"/>

 

2. The Prototype Scope

항목 설명
정의 요청마다 새로운 빈 인스턴스가 생성되는 스코프
생성 시점 getBean() 호출 또는 의존성 주입 시마다 새 인스턴스 생성
사용 예 상태를 가지는 객체 또는 매번 다른 상태가 필요한 빈
생명 주기 관리 Spring이 초기화까지만 관리하고, 그 이후는 개발자 책임
파괴 콜백 호출되지 않음 (Spring이 관리하지 않음)
자원 해제 프로토타입 빈이 가진 자원은 클라이언트가 수동으로 해제해야 함
DI 시 동작 다른 빈에 주입될 때도 항상 새로운 인스턴스가 생성됨
<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>

 

3. Singleton Beans with Prototype-bean Dependencies

  • 프로토타입 빈을 의존하는 싱글톤 빈 사용할 경우, 프로토타입 빈은 초기화 중에 주입됩니다.
  • 싱글톤 빈이 런타임에 프로토타입 빈의 새 인스턴스를 얻고 싶다면 수정자 주입 등의 방법을 사용해야 합니다.

 

 

출처