스프링 IoC 컨테이너는 Bean 객체들을 책임지고 의존성을 관리한다.
스프링 Bean은 객체와 같이 초기화 및 종료 작업이 나눠 진행된다. 객체 생성부터 의존 관계 주입 -> 초기화 콜백 메서드 호출 -> 사용 -> 소멸 전 콜백 메서드 호출 -> 스프링 종료 와 같은 생명 주기를 가진다.
여기서 빈 생명주기 콜백은 3가지 방법으로 관리된다.
1. 인터페이스 (InitializingBean, DisposableBean)
- InitializingBean 인터페이스의 afterPropertiesSet 메서드로 초기화를 진행한다.
- DisposableBean 인터페이스의 destroy 메서드로 소멸을 진행한다.
- 스프링 초기에 나온 방식으로 지금은 거의 사용하지 않는다.
- 스프링 전용 인터페이스이기 때문에 해당 코드가 인터페이스에 의존한다.
- 오버라이딩 방식이므로 메서드명을 변경할 수 없다.
- 커스팅마이징 할 수 없는 외부 라이브러리에서 사용이 불가능하다.
2. 설정 정보에서 초기화 및 종료 메서드 지정
- 설정 정보에서 메서드를 지정하고, @Bean 어노테이션에서 할당한다.
- 메서드명을 자유롭게 지정할 수 있다.
- 스프링 코드에 의존하지 않는다.
- 설정 정보를 사용하기 때문에 외부 라이브러리 코드에 적용 가능하다.
- Bean 등록 시 initMethod와 destroyMethod를 직접 지정해야 하는 번거로움이 있다.
3. 어노테이션 (@PostConstrcut, @PreDestroy)
- 어노테이션을 붙여 초기화 및 종료 메서드를 지정한다.
- 스프링에서 가장 권장하는 방식이다.
- 어노테이션만 붙이면 되는 간단함을 지닌다.
- 스프링에 종속적이지 않은 패키지이므로 스프링 외의 다른 컨테이너에서도 동작한다.
- 컴포넌트 스캔과 잘 어울린다.
- 커스터마이징이 불가한 외부 라이브러리에서 사용할 수 없다.
References
'Server > Spring' 카테고리의 다른 글
[우당탕탕 개발 일지] @Builder의 잘못된 사용 예시, List 필드가 있으면 Builder를 신중하게 사용하자! (0) | 2023.02.20 |
---|---|
[우당탕탕 개발 일지] JUnit5로 예외 테스트 (1) | 2023.02.19 |
[날카로운 질문하는 머쓱이] N+1 문제 (0) | 2022.12.14 |
[우당탕탕 개발일지] 로그인 가능한 사용자 계정 추가하기 & PasswordEncoder (0) | 2022.12.13 |
[우당탕탕 개발일지] WebSecurityConfigurerAdapter 지원 불가 (0) | 2022.12.12 |