본문 바로가기
개발/Spring

스프링 빈 이벤트 라이프 사이클

by BellOne4222 2024. 2. 4.

스프링 빈 이벤트 라이프 사이클

  • 스프링 IoC 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 메소드 호출 → 사용 → 소멸 전 콜백 메소드 호출 → 스프링 종료

  • 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메소드를 통해 초기화 시점을 알려주며, 스프링 컨테이너가 종료되기 직전에도 소멸 콜백 메소드를 통해 소멸 시점을 알려준다.

 

스프링 빈 라이프 사이클을 압축시키기 위해 생성자 주입을 통해 빈 생성과 초기화를 동시에 진행하면 되지 않을까? -> 객체의 생성과 초기화를 분

  • 생성자는 파라미터를 받고, 메모리를 할당해서 객체를 생성하는 책임을 가진다. 반면에 초기화는 이렇게 생성된 값들을 활용해서 외부 커넥션을 연결하는 등 무거운 동작을 수행한다. 
  • 따라서 생성자 안에서 무거운 초기화 작업을 함께 하는 것보다는 객체를 생성하는 부분과 초기화 하는 부분을 명확하게 나누는 것이 유지보수 관점에서 좋다. 
  • 물론, 초기화 작업이 내부 값들만 약간 변경하는 정도로 단순한 경우에는 생성자에서 한번에 처리하는게 나을 수 있다.

 

Bean LifeCycle callback(빈 생명주기 콜백함수)

  • callback : 주로 콜백함수를 부를 때 사용되는 용어이며 콜백함수를 등록하면 특정 이벤트가 발생했을 때 해당 메소드가 호출된다.
  • lifecycle callback
    • Bean을 생성하고 초기화하고 파괴하는 등 특정 시점에 호출되도록 정의된 함수
  • 주로 많이 사용되는 콜백
    • @PostConstruct : 빈 생성 시점에 필요한 작업을 수행
    • @PreDestroy : 빈 파괴(주로 어플리케이션 종료) 시점에 필요한 작업을 수행
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy; 
public class ExampleBean {

	@PostConstruct    
	public void initialize() throws Exception {        
    	// 초기화 콜백 (의존관계 주입이 끝나면 호출)    
    }  
    
    @PreDestroy    
    public void close() throws Exception{        
    	// 소멸 전 콜백 (메모리 반납, 연결 종료와 같은 과정)    
        }
    }

 

  • 장점
    • 스프링이 아닌 다른 컨테이너에서도 동작한다.
    • 컴포넌트 스캔에 용이하다
  • 단점
    • 외부 라이브러리에서 적용이 불가능하다.
      • 외부 라이브러리에서 초기화, 종료를 해야 할 경우 두 번째 방법 즉, @Bean의 initMethod와 destoryMethod 속성을 사용해야한다.

 

  • 빈 생명주기 콜백의 필요성
    • 보통 프로젝트를 하다보면 DB연결, 네트워크 소켓 연결 등과 같이 시작 시점에 미리 연결한 뒤 어플리케이션 종료시점에 연결을 종료해야 하는 경우 객체의 초기화 및 종료 작업이 필요할 것이다.
      (Ex. 커넥션 풀의 connect & disconnect)스프링 빈도 위와 같은 원리로 초기화 작업과 종료 

    • 스프링 빈도 위와 같은 원리로 초기화 작업과 종료 작업이 나눠서 진행된다.
    • 객체 생성 → 의존관계 주입이라는 라이프사이클을 가진다.
    • 스프링 빈은 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다.

'개발 > Spring' 카테고리의 다른 글

MVC 패턴(1) - 요구사항 설계  (0) 2024.02.15
AOP(Aspect Oriented Programming)  (0) 2024.02.06
IoC 컨테이너  (0) 2024.02.04
IoC(Inversion Of Controll)  (0) 2024.02.04
DI(Dependency Injection)  (0) 2024.02.04