본문 바로가기

Server/Spring

[날카로운 질문하는 머쓱이] 빈 스코프에 따른 생명 주기

반응형
SMALL

 

스프링 IoC 컨테이너는 Bean 객체들을 책임지고 의존성을 관리한다.

스프링 Bean은 객체와 같이 초기화 및 종료 작업이 나눠 진행된다. 객체 생성부터 의존 관계 주입 -> 초기화 콜백 메서드 호출 -> 사용 -> 소멸 전 콜백 메서드 호출 -> 스프링 종료 와 같은 생명 주기를 가진다.

 

여기서 빈 생명주기 콜백은 3가지 방법으로 관리된다.

 

1. 인터페이스 (InitializingBean, DisposableBean)

- InitializingBean 인터페이스의 afterPropertiesSet 메서드로 초기화를 진행한다.

- DisposableBean 인터페이스의 destroy 메서드로 소멸을 진행한다.

- 스프링 초기에 나온 방식으로 지금은 거의 사용하지 않는다.

- 스프링 전용 인터페이스이기 때문에 해당 코드가 인터페이스에 의존한다.

- 오버라이딩 방식이므로 메서드명을 변경할 수 없다.

- 커스팅마이징 할 수 없는 외부 라이브러리에서 사용이 불가능하다.

 

2. 설정 정보에서 초기화 및 종료 메서드 지정

- 설정 정보에서 메서드를 지정하고, @Bean 어노테이션에서 할당한다.

- 메서드명을 자유롭게 지정할 수 있다.

- 스프링 코드에 의존하지 않는다.

- 설정 정보를 사용하기 때문에 외부 라이브러리 코드에 적용 가능하다.

- Bean 등록 시 initMethod와 destroyMethod를 직접 지정해야 하는 번거로움이 있다.

 

3. 어노테이션 (@PostConstrcut, @PreDestroy)

- 어노테이션을 붙여 초기화 및 종료 메서드를 지정한다.

- 스프링에서 가장 권장하는 방식이다.

- 어노테이션만 붙이면 되는 간단함을 지닌다.

- 스프링에 종속적이지 않은 패키지이므로 스프링 외의 다른 컨테이너에서도 동작한다.

- 컴포넌트 스캔과 잘 어울린다.

- 커스터마이징이 불가한 외부 라이브러리에서 사용할 수 없다.

 

 

 

References

https://dev-coco.tistory.com/170

반응형
LIST