Spring/Spring

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

noahkim_ 2023. 10. 14. 18:19

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

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

 

 

 

출처