bean 생명주기

제로·2023년 9월 15일
0

Spring

목록 보기
18/18

bean 생명주기

  • 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.

  • 스프링 빈의 이벤트 라이프사이클 : 스프링 컨테이너 생성 -> 스프링 빈 생성(객체 생성) -> 의존관계 주입 -> 초기화 콜백 사용 -> 소멸전 콜백 -> 스프링 종료

  • 초기화 콜백 : 빈이 생성되고, 빈의 의존관계 주입이 완료된 후에 호출

  • 소멸전 콜백 : 빈이 소멸되기 직전에 호출

  • cf) 객체의 생성과 초기화를 분리하자

  • 생성자는 파라미터를 받고 메모리를 할당해서 객체를 생성하고, 초기화는 이러한 객체의 생성된 값을 활용해서 외부 커넥션을 연결하는 등 기능을 수행한다. 객체지향의 단일책임 원칙에 의해 각각의 역할을 나누는 것이 유지보수의 관점에서도 좋다.

bean 생명주기 콜백

1) 인터페이스 InitializingBean, DisposableBean

  • bean에 등록할 객체에 InitializingBean, DisposableBean를 상속받게 한다.
  • InitializingBean은 afterPropertiesSet() 메서드로 초기화 지원
  • DisposableBean은 destroy() 메서드로 소멸 지원
  • 내가 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없다.
  • 이 인터페이스는 스프링 전용 인터페이스이다. 스프링에 의존적

2) 빈 등록 초기화, 소멸 메서드 지정

  • 설정 정보에 @Bean(initMethod = "init", destroyMethod = "close") 처럼 초기화, 소멸 메서드를 지정
  • destroyMethod는 기본값이 (inferred) 추론으로 등록되어 있어서, 따로 지정하지 않아도 close 또는 shutdown으로 명시된 메서드를 자동으로 호출해준다
  • 추론기능을 사용하고 싶지 않으면 destroyMethod=""처럼 공백을 지정해준다.

3) @PostConstruct, @PreDestroy

  • 초기화 메서드에 @PostConstruct, 소멸전 메서드에 @PreDestroy 어노테이션을 붙여준다.
  • 최신 스프링에서 가장 권장하는 기술이며, 자바 표준 기술이기에 스프링 이외의 컨테이너에서도 동작한다.
  • 외부라이브러리에는 적용할 수 없다.
profile
아자아자 화이팅

0개의 댓글

관련 채용 정보