개발 기록

빈 스코프 본문

JAVA/스프링

빈 스코프

수염차 2022. 3. 15. 12:44

스코프-빈이 존재할 수 있는 범위

 

스코프 종류

  • 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프
  • 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입, 초기화까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 ( 종료 메서드 호출 x )
    • 스프링 컨테이너에 요청할때 마다 새로 생성 ( 빈을 조회할 때 생성되고 초기화 메서드도 실행 )
  • 웹 관련 스코프( 웹 환경에서만 동작 / 스코프의 종료 시점까지 관리 )
    • request : 웹 요청이 들어오고 나갈때 까지 유지
    • session : 웹 세션이 생성되고 종료될 때까지 유지
    • application : 웹의 서블릿 컨텍스와 같은 범위로 유지

프로토타입과 싱글톤 함께 사용시 발생하는 문제

- 싱글톤 빈은 생성 시점에만 의존관계를 주입받기 때문에 프로토타입 빈이 새로 생성되기는 하지만 사용할때마다 생성되지 않고 싱글톤 빈과 함께 유지된다 ( 같은 인스턴스가 제공됨 )

 

해결 방법

1.

-ObjectProvider : 지정한 빈을 컨테이너에서 대신 찾아주는 DL ( Dependency Lookup ; 의존관계 조회) 서비스 제공

-ObjectProvider 의 getObject( )를 호출하면 내부에서는 스프링 컨테이너를 통해 해당 빈을 찾아서 반환한다. ( 찾을때마다 새로운 프로토타입 빈이 생성되어 반환됨 )

-스프링에 의존

 

2.

-JSR-330 Provider : javax.inject.Provider 자바 표준을 사용하는 방법

-라이브러리를 gradle에  추가해야함

implementation 'javax.inject:javax.inject:1'

 

출처

인프런  스프링 핵심 원리 - 기본편

Comments