빈 생명주기 & 콜백
빈 생명주기 콜백 시작
- 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.
- 여기서 초기화 작업은 의존 관계 주입이 모두 완료되고 나서 호출이 되어야 한다. 개발자는 이 호출 시점을 알고 있어야 한다. 어떻게 파악할 수 있을까?
- 스프링에서는 의존 관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공해준다.
- 스프링 빈의 이벤트 라이프사이클은 아래와 같다.
- 생성 > 스프링 빈 생성 > 의존관계 주입 > 초기화 콜백 사용 > 소멸전 콜백 스프링 종료
- 초기화 콜백을 사용하는것은 빈이 생성되고 빈의 의존관계 주입이 완료된 후 호출된다.
- 소멸전 콜백을 사용하는것은 빈이 소멸되기 직전에 호출된다.
- 생성 > 스프링 빈 생성 > 의존관계 주입 > 초기화 콜백 사용 > 소멸전 콜백 스프링 종료
- 객체의 생성과 초기화를 분리하자.
- 생성자는 필수 정보(파라미터)를 받고, 메모리를 할당해서 객체를 생성하는 책임을 갖게 된다.
- 초기화는 생성된 값들을 활용해서 외부 커넥션을 연결하는 등 다소 무거운 동작을 수행한다.
- 따라서 생성자 안에서 무거운 초기화 작업을 함께 하는 것 보다는 객체를 생성하는 부분과 초기화 하는
부분을 명확하게 나누는 것이 유지보수 관점에서 좋다.
스프링 빈
- 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지합니다.
- 싱글톤
- 기본 스코프이며, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 입니다.
- 프로토타입
- 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지 관리하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.
- 싱글톤 vs 프로토타입 스코프의 차이
- 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다. 반면에 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다.
- 프로토타입 스코프 종료 메서드가 호출되지 않는다.
- 스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계 주입, 초기화까지만 처리한다는
것이다. 클라이언트에 빈을 반환하고, 이후 스프링 컨테이너는 생성된 프로토타입 빈을 관리하지 않는다.
프로토타입 빈을 관리할 책임은 프로토타입 빈을 받은 클라이언트에 있다. - 싱글톤 빈은 스프링 컨테이너 생성 시점에 초기화 메서드가 실행 되지만, 프로토타입 스코프의 빈은 스프링
컨테이너에서 빈을 조회할 때 생성되고, 초기화 메서드도 실행된다. - 싱글톤 빈과 스코프 빈이 함께 유지되는것이 문제다. > Provider
웹 스코프
- 웹 환경에서만 동작한다.
- 프로토타입 스코프랑 다르게 해당 스코프의 종료시점까지 관리한다. 종료 메서드가 호출된다.
- HTTP request가 요청될때 각 클라이언트의 빈이 생성되고 이것은 HTTP request 라이프사이클 (요청-종료) 시점까지 같은 빈으로 관리된다.
'Spring' 카테고리의 다른 글
의존성 주입 (1) | 2023.01.21 |
---|---|
Spring Security (0) | 2021.12.14 |
의존관계 자동 주입 (0) | 2021.12.13 |
컴포넌트 스캔 (0) | 2021.12.12 |
싱글톤 컨테이너 (0) | 2021.12.12 |
댓글
이 글 공유하기
다른 글
-
의존성 주입
의존성 주입
2023.01.21 -
Spring Security
Spring Security
2021.12.14 -
의존관계 자동 주입
의존관계 자동 주입
2021.12.13 -
컴포넌트 스캔
컴포넌트 스캔
2021.12.12