개발 기록
빈 스코프 본문
스코프-빈이 존재할 수 있는 범위
스코프 종류
- 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프
- 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입, 초기화까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 ( 종료 메서드 호출 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'
출처
인프런 스프링 핵심 원리 - 기본편
'JAVA > 스프링' 카테고리의 다른 글
Type definition error: [simple type, (0) | 2023.02.17 |
---|---|
스프링 DB 1편 - 데이터 접근 핵심 원리 후기 (1) | 2022.10.27 |
스프링 빈 라이프 사이클 (0) | 2022.03.14 |
조회한 빈이 모두 필요할 때, List, Map (0) | 2022.03.10 |
다양한 의존관계 주입 방법 (0) | 2022.03.10 |
Comments