본문 바로가기
Dev/Spring Framework

『Spring Core』 Bean LifeCycle

by 세대교체 2024. 11. 7.

Spring에서 왜 Bean 등록이 필요할까?

Spring에서 Bean은 Spring의 IoC(Inversion of Control) 컨테이너에 의해 관리된다.

빈을 등록함으로써 Spring Container는 빈의 생명주기를 관리하고 필요한 곳에 의존성 주입(DI)을 통해 제공할 수 있다.

 

쉽게 생각해서 의존성 주입과 같은 기술을 편리하게 사용하기 위해서는 객체를 Spring Bean으로 등록하여 Spring Container에서 관리하도록 위임해야 한다.

 

 

Spring Bean LifeCycle

Spring Container 생성 -> Bean 생성 -> 의존성 주입 -> 초기화 콜백 -> Bean 사용 -> 소멸 전 Callback -> Spring 종료

 

 

Bean LifeCycle Callback Method

Spring은 Bean LifeCycle에 맞춰 커스텀 로직을 수행할 수 있는 방법을 제공하는데 다음과 같다.

  • @PostConstruct와 @PreDestroy 어노테이션 사용
  • InitializingBean과 DisposableBean 인터페이스 구현
  • @Bean 설정에서 커스텀 init-method와 destroy-method 지정

 

가능하면 Spring에서 권장하는 @PostConstruct와 @PreDestroy 어노테이션을 사용하자.

 

 

@PostConstruct와 @PreDestroy 어노테이션 사용

의존성 주입 후 (@PostConstruct), 빈이 소멸되기 전(@PreDestroy) 콜백 메서드에 선언하면 된다.

Java EE의 표준 어노테이션으로, 스프링에 종속적이지 않다. 그러나 소스 코드를 수정할 수 없는 경우(외부 라이브러리 등)에는 사용할 수 없다.

 

 

InitializingBean과 DisposableBean 인터페이스 구현

해당 인터페이스를 구현하여 afterPropertiesSet()destroy() 메서드를 통해 초기화와 소멸 로직을 정의한다.

해당 방법은 코드가 스프링 프레임워크에 강하게 결합된다. 프레임워크에 강하게 결합된 코드는 단위 테스트 코드 작성이 어렵다.

그냥 쓰지 말자.

 

 

@Bean 설정에서 커스텀 init-method와 destroy-method 지정

설정 클래스에서 초기화 및 소멸 메서드를 지정한다.

설정 클래스에서 선언하기 때문에 외부 라이브러리와 같이 내부 코드를 수정할 수 없는 경우에 유용하다.