Bean은 [ 객체 생성 -> 의존관계 주입 -> 스프링 컨테이너 상주 -> 소멸 ] 의 과정을 거친다.
Bean은 스프링이 대신 생성해주므로, 초기화 작업과 종료 작업이 원할히 진행 될 수 있도록, 스프링은 의존관계 주입 된 이후와 소멸되기 직전에 개발자가 특정한 로직을 수행시킬 수 있도록 '콜백(CallBack)'을 제공한다.
초기화 작업은 생성자 로직에 포함시킬 수는 있지만 초기화 과정이 무거운 경우, 객체 생성과 초기화 작업을 분리하는 것이 좋다. 이 경우, Spring이 제공하는 초기화 콜백을 사용하는 것이 좋다. 콜백을 제공하는 방식은 3가지가 있다.
1) InitializingBean, DisposableBean 인터페이스
2) @Bean(initMethod = "init", destroyMethod = "close")
3) @PostConstruct, @PreConstruct
2)와 3)이 가장 권장되는 방법이다.
1)은 스프링 인터페이스가 제공하는 콜백 메소드를 오버라이딩해야 하므로, 유연하지 못하고 스프링 인터페이스에 의존하게 된다.
@Bean(initMethod = "init", destroyMethod = "close")
소스를 수정할 수 없는 외부 라이브러리 클래스의 Bean을 생성할 때 사용한다. initMethod와 destroyMethod에 메소드명을 설정으로 넣으면 콜백시점에 자동으로 호출되어 로직을 수행한다.
@PostConstruct, @PreConstruct
개발자가 직접 작성한 코드에 적용하는 어노테이션이다. 초기화 메소드와 소멸 메소드 위에 어노테이션을 선언하면 된다. @PostConstruct와 @PreConstruct는 스프링에서 제공하는 어노테이션이 아니므로, 스프링에 의존하지도 않는다. 또한 내가 원하는 메소드 위에 선언만 하면 되니 유연하다.
참고자료
'SPRING > Spring Basic' 카테고리의 다른 글
[Spring] Bean 자동등록 VS Bean 수동등록 (0) | 2024.02.06 |
---|---|
[Spring] 스프링 컨테이너와 싱글톤 패턴 (0) | 2024.02.05 |
[Spring] 스프링을 사용하는 이유 (0) | 2024.02.01 |
[Spring] 필드주입방식이 권고되지 않는 이유 (2) | 2023.06.23 |
[Spring] 의존성 주입이란? ( Dependency Injection ) (0) | 2023.06.20 |