스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸전 콜백 → 스프링 종료
참고. 객체의 생성과 초기화를 분리하자
생성자는 필수 정보를 받고 메모리를 할당하여 객체를 생성하는 데 집중해야함
초기화는 생성된 것을 활용하여 외부 커넥션을 연결하는 등 무거운 동작을 수행함
따라서 분리하는 것이 유지보수에 용이함
인터페이스
InitializingBean : 빈의 의존관계 주입 후 초기화 콜백 함수 afterPropertiesSet()을 지원한다.
DisposableBean: 빈의 소멸전 콜백 함수 destroy() 를 지원한다.
cons
스프링 전용 인터페이스에 의존한다.
외부 라이브러리에 적용할 수 없다.
메서드 이름 변경을 할 수 없다.
초기화, 소멸 메서드
@Bean과 함께 initMethod, destroyMethod 를 설정하여 초기화, 소멸 시 사용할 콜백 함수를 지정한다.
위 인터페이스의 단점을 모두 해결한다.
종료 메서드 추론 기능 : close, shutdown 라는 이름의 메서드를 자동으로 소멸 콜백 함수로 호출해준다. / 기능을 사용하고 싶지 않을 경우 destroyMethod를 공백으로 지정해준다.
어노테이션
이거쓰면댐
@PostConstruct : 어노테이션을 사용한 함수를 초기화 콜백으로 사용
@PreDestroy : 어노테이션을 사용한 함수를 소멸전 콜백으로 사용
자바 표준, 편리성, 스프링에서 권장하는 방법
외부 라이브러리에는 해당 함수에 어노테이션을 직접 넣어야하기에 사용하기 힘들다 → 이럴때만 @Bean 을 이용하자