8. 스프링 빈 라이프사이클
빈 라이프 사이클
- 스프링 빈 컨테이너 생성
- 스프링 빈 생성 (생성자 주입은 이때 된다.)
- 의존관계 주입 (필드, setter, 메소드 주입)
- 초기화 콜백
- 사용
- 소멸전 콜백
- 스프링 종료
- 참고: 객체의 생성과 초기화를 분리하자.
- 생성은 메모리에 할당하는 것
- 초기화는 생성자에서 받은 값을 이용해 외부 커넥션 등 무거운 동작을 수행하는 것
라이프 사이클 사용법
- 인터페이스 (InitializingBean, DisposableBean)
- 설정 정보에 초기화 메소드, 종료 메소드 지정
- @PostConstruct, @PreDestroy 어노테이션 지원
인터페이스 방식의 단점
- 스프링에서만 유효하다. 스프링 의존적
- 메소드의 이름을 못바꾼다.
- 인터페이스는 초기 단계의 방법
빈 등록 초기화, 소멸 메소드 등록
@Bean(initMethod = "init", destroyMethod="close")
- 스프링 빈이 스프링 코드에 의존적이지 않음.
- 외부라이브러리에서도 사용 가능
- destroyMethod에는 특별한 기능이 있다. 기본값은
(inferred)로 추론해서 사용하기도한다.- close, shutdown 메소드가 있으면 자동으로 호출된다.
- 자동으로 호출되기 싫으면 destroyMethod="" 빈문자열로 적어야한다.
@PostConstruct, @PreDestroy (권장)
- 최신 스프링에서 권장, 어노테이션 하나로 아주 편리
- JSR-250이라는 자바 표준. 스프링 말고 다른 컨테이너에서도 정상 작동
- 외부 라이브러리에는 적용안되는 단점