목표
1. 스프링은 크게 3가지 방법으로 빈 생명주기 콜백을 지원한다. 각 방식마다의 특징을 기억하자!
-> 인터페이스, 설정 정보에 초기화 및 소멸 메서드 지정, 애노테이션.
'빈 생명주기 콜백' 목차
1. 빈 생명주기 콜백 시작
2. 인터페이스 InitializingBean, DisposableBean (이번 포스팅)
3. 빈 등록 초기화, 소멸 메서드
4. 애노테이션 @PostConstruct, @PreDestroy
2. 인터페이스 InitializingBean, DisposableBean
1) 초기화 콜백: InitializingBean 인터페이스를 구현하자.
들어가보면, afterPropertiesSet() 메서드가 있다.
"프로퍼티들의 세팅이 끝나면, 즉 의존관계 주입이 끝나면" 호출하는 메서드라는 뜻이다.
의존관계 주입 후, 초기화 메서드 afterPropertiesSet() 가 호출된다.
2) 소멸 전 콜백: DisposableBean 인터페이스를 구현하자.
destroy() 메서드는 빈이 소멸될 때 호출된다.
두 개의 인터페이스를 구현한 후의 코드.
이전 시간에 작성한 NetworkClient 테스트코드를 실행하고 출력을 확인하자.
스프링 컨테이너를 생성하고 빈을 조회하고, 컨테이너를 종료하는 내용이었다.
객체 생성(생성자 호출)때는 당연히 url이 값이 없다.
초기화 콜백 : 의존관계 주입 직후, connect() , call() 이 호출됬다.
소멸전 콜백 : 컨테이너 종료(빈 소멸) 할 때 close를 출력하는 distroy()가 호출됬다.
3) 초기화, 소멸 인터페이스의 단점
- 이 인터페이스는 스프링 전용 인터페이스다. 해당 코드가 스프링 전용 인터페이스에 의존한다.
- 초기화, 소멸 메서드의 이름을 변경할 수 없다.
- 내가 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없다.
- 인터페이스 방식은 2003년에 나온 방법이고, 지금은 더 나은 방법들이 있어서 거의 안 쓴다.
3. 빈 등록 초기화, 소멸 메서드
설정 정보에 @Bean(initMethod = "메서드이름" , destroyMethod = "메서드이름") 으로 초기화, 소멸 메서드를 지정할 수 있다.
1) 특징
* 메서드 이름을 자유롭게 줄 수 있다.
* '설정 정보'를 사용하니까 외부 라이브러리에도 초기화, 소멸 메서드를 적용할 수 있다.
2) 종료 메서드 추론 (inferred)
@Bean( destroyMethod = "메서드이름")에 특별한 기능이 있다.
대부분 (외부)라이브러리의 종료 메서드 이름이 close, shutdown 임을 이용한 기능이다.
@Bean 의 destroyMethod의 기본값이 (inferred) 로 등록되어 있다.
그래서 직접 스프링 빈으로 등록하면, close, shutdown 이름의 메서드를 자동으로 호출해준다.
추론 기능을 사용하지 않으려면, @Bean( destroyMethod = "") 처럼 공백을 지정하면 된다.
4. [권장] 애노테이션 @PostConstruct, @PreDestroy
내가 정의한 메서드에 애노테이션을 붙이는 방법이다. 편리하다.
1) 특징
* 최신 스프링에서 가장 권장하는 방법이다.
* 패키지가 javax 로 시작하는데. 자바 표준이라는 의미다. 따라서 스프링이 아닌 다른 컨테이너에서도 잘 동작한다.
* 유일한 단점은 외부 라이브러리에는 적용하지 못한다는 것이다.
* 외부 라이브러리에는 @Bean(initMethod = "메서드이름") 방식을 쓰자.
다음 시간에는 빈 스코프를 배운다.
공부 내용 출처 : 스프링 핵심 원리 기본편
'프로그래밍 > Spring Basic' 카테고리의 다른 글
19. 빈 생명주기 콜백 (0) | 2021.12.27 |
---|---|
18. 조회한 빈이 모두 필요할 때 List, Map에 담기 (0) | 2021.12.27 |
17. 애노테이션 직접 만들기 (0) | 2021.12.27 |
16. 조회할 빈이 2개 이상일 때의 문제 해결하기 (0) | 2021.12.27 |
15. 생성자 주입을 선택해야하는 이유와 롬복 (0) | 2021.12.27 |