빈 생명주기 콜백 시작
DB 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션이 시작하는 시점에 연결하고, 종료되는 시점에 연결을 종료하는 작업을 하려면 객체의 초기화와 종료 작업이 필요합니다.
이번 강의에서는 스프링에서의 빈 생명주기 콜백을 공부했습니다.
스프링 빈의 이벤트 라이프사이클
- 스프링 컨테이너 생성
- 스프링 빈 생성
- 의존관계 주입
- 초기화 콜백
- 사용
- 소멸전 콜백
- 스프링 종료
초기화 콜백: 빈이생성되고, 빈의 의존관계 주입이 완료된 후 호출
소멸전 콜백: 빈이 소멸되기 직전에 호출
객체의 생성과 초기화를 분리하자.
생성자는 필수 파라미터를 받고, 메모리를 할당해서 객체를 생성하는 책임을 가집니다. 반면 초기화는 이렇게 생성된 값들을 이용해 외부 커넥션 연결 등 무거운 동작을 수행합니다. 따라서, 생성자 안에 무거운 초기화 작업을 함께 하는 것 보다는 객체를 생성하는 부분과 초기화 하는 부분을 명확하게 나누는 것이 유지보수 관점에서 좋습니다.
(내부 변수들만 약간 변경하는 정도의 단순한 경우는 예외)
스프링이 지원하는 빈 생명주기 콜백
초기화 방법 중 가장 중요한 @PostConstruct, @PreDestroy 애노테이션 방법과 설정 정보 방법만 요약하겠습니다.
@PostConstruct, @PreDestroy 애노테이션 방법
@PostConstruct, @PreDestroy는 빈으로 등록된 객체의 콜백을 사용할 메서드에 @PostConstruct, @PreDestroy만 붙여주면 끝입니다.
[빈으로 등록된 Class, NetwrokClient]
[Bean으로 등록하는 설정정보와 테스트 코드]
위 이미지와 같이 Bean으로 등록하면 애플리케이션 시작시 컨테이너 생성-> 빈 생성 -> 의존관계 주입 ->초기화 콜백이 실행되고 애플리케이션이 종료되는 시점에 소멸 전 콜백이 발생하는것을 알 수 있었습니다.
설정 정보를 통한 방법
initMethod에 초기화 콜백 메서드명을 넣고, destoryMethod에 소멸 전 콜백 메서드명을 넣으면 됩니다. 그럼 두 가지의 차이점은 뭘까요?
설정 정보 사용 방법의 특징
- 메서드 이름을 자유롭게 줄 수 있다.
- 스프링 빈이 스프링 코드에 의존하지 않는다.
- 코드가 아니라 설정 정보를 사용하기 떄문에 코드를 못고치는 외부 라이브러리도 메서드를 적용할 수 있다.
@PostConstruct, @PreDestroy 애노테이션 방법의 특징
- 최신 스프링에서 가장 권장하는 방법이다.
- 애노테이션 하나만 붙이면 되므로 매우 편리하다.
- 스프링에 종속적인 기술이 아닌 자바 표준이라 다른 컨테이너에도 잘 동작한다.
- 컴포넌트 스캔과 잘 어울린다.
- 단점으로는 외부 라이브러리에는 적용하지 못한다. 외부 라이브러리 사용시 설정 정보를 통한 방법을 사용하자.
'Languege > Java & Spring' 카테고리의 다른 글
[스프링 에러] 카카오 로그인 시 발생 오류 및 해결방법 Provider ID must be specified for client registration 'kakao' (0) | 2022.08.24 |
---|---|
[김영한 스프링] 빈 스코프 (0) | 2022.03.18 |
[김영한 스프링] 의존관계 자동주입 (0) | 2022.03.16 |
[김영한 스프링] 싱글톤 컨테이너 (0) | 2022.03.14 |