본문 바로가기
Spring

(Spring) 스코프

by windy7271 2022. 7. 12.
728x90
반응형

스프링 빈이 기본적으로 싱글톤 스코프로 생서된다.

빈 스코프란 빈이 존재 할 수 있는 범위를 뜻한다

 

다양한 스코프를 지원한다.

싱글톤, 프로토타입, 웹 관련스코프

 

싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프

프로토타입 : 빈의 생성과 의존관계 까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.

스프링 빈의 이벤트 라이프사이클
1.스프링컨테이너생성 > 2.스프링빈생성 > 3.의존관계주입 > 4.초기화콜백 사용 > 5.소멸전콜백 > 6.스프링 종료

 

 

postConstruct: (스프링 컨테이너 생성 시점에 초기화 메서드가 실행된다 (Spring Scope))

- 객체가 생성된 후 별도의 초기화 작업을 위해 실행하는 메소드를 선언한다.

- WAS 가 띄어질때 실행된다 . 

 

1. 싱글톤  

1. 싱글톤 스코피의 빈을 스프링 컨테이너에 요청

2. 스프링 빈 반환

3. 이후 같은 요청이 와도 같은 객체 인스턴스 스프링 반환.

 

2.프로토타입

1. 프로토타입 스코프의 빈을 스프링 컨테이너에 요청

2. 이 시점에 프로토타입 빈을 생성하고, 의존관계 주입 

3. 스프링 컨테이너는 생성한 프로토타입 빈을 클라이언트에 반환

4. 이후에 스프링 컨테이너에 같은 요청이 오면 항상 새로운 프로토타입 빈을 생성 반환

 

 

- 스프링 컨테이너는 프로토타입 빈을 생성, 의존관계 주입, 초기화 까지만 하고 생성된 빈을 관리하지 않는다.

- @PreDestroy 같은 종료 메서드가 호출되지 않는다.

- 요청할 때 마다 생성된다 

 

같이 사용시 문제점 

 

스프링은 싱글톤 빈을 일반적으로 사용하기 때문에, 싱글톤 빈이 프로토타입 빈을 사용한다.

하지만, 싱글톤 빈은 생성 시에만 의존관계를 주입 받아서, 프로토타입이 생성 되지만 계속 유지되기에는 문제가 된다.

포로토타입 빈 주입시 새로 생성하는게 아닌 사용할 때 마다 새로 생성 하는 방법은 어렵다.

 

 

 

1.Provider 

싱글톤 빈과 함께 provider 방법으로 해결한다.

ObjectFactory, Objectprovider 사용

ObjectFactory: 단순기능, 라이브러리 필요 없음, 스프링에 의존

Objectprovider : ObjectFactory상속, 옵션기능 많음, 라이브러리 필요 없음, 스프링에 의 

 

항상 새로운 프로토타입 빈 생성

getObject() 로 스프링 컨테이너를 통해 해당 빈을 찾아서 반환

 

2. JSR-330 이용

라이브러리 추가

javax.inject:javax.inject:1

provider의 get()을 호출하여 해당 빈을 찾아서 반환한다.

- 단순하다.

- 별도 라이브러리 필요하다.

- 다른 컨테이너에서도 사용할 수 있다..

 

웹 스코프

- 웹 환경에서만 동작한다.

- 종료 메서드가 호출된다.

 

request : http요청 하나 들어오고 나갈 때 까지 유지되는 스코프, 요청마다 빈 인스턴스가 생성되고, 관리된다.

- 동시에 여러 HTTP 요청이 오면 어떤 요청이 남긴 로그인지 구분하기 어려울때 사용

[UUID][requestURL]{message}

 

session : HTTP Session 과 동일한 생명주기를 가지는 스코프

 

application : 서블릿 컨텍스트 와 동일한 생명주기를 가지는 스코프

 

websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프

 

반응형

댓글