참고 : https://velog.io/@hosunghan0821/Spring-Spring-bean-life-cycle
강의자료
https://docs.spring.io/spring-framework/reference/core/beans/definition.html
https://dev-coco.tistory.com/170#google_vignette
콜백 메서드는 Spring Bean의 생명주기에서 특정 시점에 실행되도록 설정된 메서드로 초기화 혹은 종료 시점에 필요한 작업(리소스 초기화, 정리)을 처리할 때 주로 사용된다.
💡 Bean의 Life Cycle이란 해당 객체가 언제, 어떻게 생성되어 소멸되기 전까지 어떤 작업을 수행하고 언제, 어떻게 소멸되는지 일련의 과정을 이르는 말

1. Spring Container 초기화(생성)
2. Bean 인스턴스 생성
4. 초기화 메서드 호출 (@PostConstruct, afterPropertiesSet())
- Bean 생성 및 의존관계 설정이 완료된 후 호출
5. Bean 사용
6. 소멸 메서드 호출 (@PreDestroy, destroy())
- Bean이 소멸되기 직전에 호출
7. Bean 소멸 / 스프링 종료
생성자는 파라미터를 받고, 메모리를 할당해서 객체를 생성하는 책임을 가진다.
반면에
초기화는 이렇게 생성된 값들을 활용해서 외부 커넥션을 연결하는 등 무거운 동작을 수행한다.
따라서 생성자 안에서 무거운 초기화 작업을 함께 하는 것보다는 객체를 생성하는 부분과 초기화 하는 부분을 명확하게 나누는 것이 유지보수 관점에서 좋다.
물론, 초기화 작업이 내부 값들만 약간 변경하는 정도로 단순한 경우에는 생성자에서 한번에 처리하는게 나을 수 있다.
1. InitializingBean, DisposableBean
Bean이 생성되고 모든 의존성이 주입된 후 InitializingBean의 afterPropertiesSet() 메서드가 호출되고 초기화 작업을 수행할 수 있다. 컨테이너가 종료될 때는 DisposableBean의 destroy() 메서드가 호출되며, 리소스 해제나 정리 작업을 처리할 수 있다.
‼️참고할 점
인터페이스임.
-> 코드를 고칠 수 없는 외부 라이브러리에 적용 불가능하다!
2. @Bean 속성
Spring에서 생명주기 콜백을 지원하는 방법으로 설정 정보에 초기화 메서드와 종료 메서드를 지정하는 방법을 사용할 수 있다. 이 방법을 선택하면 외부 라이브러리에도 콜백 메서드를 사용할 수 있다.
@Bean(initMethod = "초기화 메서드명", destroyMethod = "소멸 메서드명")이렇게 지정해놓으면
외부의 다른 곳에서도 afterPropertiesSet()나 destroy() 같이 사용이 가능하다.
public class ExampleBean {
public void init() throws Exception {
//초기화 콜백
}
public void close() throws Exception {
// 소멸 전 콜백
}
}
@Configuration
class LifeCycleConfig {
@Bean(initMethod = "init", destroyMethod = "close")
public ExampleBean exampleBean() {
}
}
‼️참고할 점
@Bean의destroyMethod속성은 종료 메서드 추론 기능으로 대부분의 라이브러리 종료 메서드 이름인 close, shutdown이 기본값으로 등록되어 이름이 둘 중 하나라면 명시하지 않아도 동작하도록 구성되어 있다.
3.@PostConstruct, @PreDestroy
최신 스프링에서 가장 권장하는 방법이다.
@PostConstruct
@PreDestroy
@PreDestroy어노테이션이 달린 메소드는 bean이 bean 컨테이너 내부 에서 파괴되기 직전에 호출표준 Annotation 방식의 단점
- 외부 라이브러리에 적용이 불가능하다.

requestsessionapplication