스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료
스프링은 다양한 콜백 기능을 제공함
초기화 콜백: 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출(초기화 시점을 알려줌)
소멸전 콜백: 빈이 소멸되기 직전에 호출 (스프링 컨테이너가 종료되기 직전)
💡 객체의 생성과 초기화를 분리해야만 하는가?
- 객체의 생성 : 생성자가 필수 정보(파라미터)를 받아서 메모리를 할당해서 객체를 생성
- 초기화 : 이 값들을 활요해서 외부 커넥션과 연결하는 등 무거운 동작 수행
(단, 초기화 작업이 내부 값들만 약간 변경하는 정도로 단순한 경우, 생성자에서 한 번에 다 처리하는 게 더 나을 수 있음)
InitializingBean
- afterPropertiesSet()
메서드
DisposableBean
- destroy()
메서드
- 초창기 방법!
- 다른 방법들이 더 낫기 때문에, 거의 사용하지 않음!
@Bean(initMethod = "init", destroyMethod = "close")
@Bean
의 destroyMethod
속성 - 기본값이 (inferred)(추론)으로 되어 있음close
, shutdown
이라는 이름의 메서드를 종료 메서드로 추론해서 자동으로 호출해줌destroyMethod=""
처럼 공백 지정하면 됨 (단, 설정을 아주 꼬이게 할 수 있으므로, 추천하지 않음)javax.annotation.PostConstruct
패키지 : 스프링에 종속적인 기술이 아닌 자바 표준 → Spring이 아닌 다른 컨테이너에서도 동작함