빈 생명주기 콜백
김영한님의 스프링 핵심 원리 - 기본편 강의를 듣고 작성했습니다.
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 개발자가 되어보세요! 📣 확인해주
www.inflearn.com
콜백이 뭔지 헷갈리는 부분이 있어서 콜백의 정의를 먼저 찾아봤다
콜백의 정의
- 다른 코드의 인수로서 넘겨주는 실행가능한 코드
- 다른 함수에서 접근 가능하고 이를 실행한 함수 다음에 실행되는 함수
- 콜백을 넘겨받은 함수는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할수도 있다
- 'callback' 함수보단 'called at the back' 함수로 생각하는게 이해하기 편하다
Example)
// 다른 함수를 인자로서 받는 함수
funct printANumber(int number, funct callbackFunction) {
printout("The number you provided is : " + number);
}
// driver 메소드의 callback function에 변수로 넣을 함수
funct printFinishMessage() {
printout("I have finished printing numbers.");
}
// driver method
funct event() {
printANumber(6, printFinishMessage);
}
Output)
The number you provided is : 6
I have finished printing numbers.
빈 생명주기 콜백
객체를 생성하고 난 직후나 객체가 소멸되기 직전에 해둬야하는 일들이 있을때가 있다.
예를들면 데이터베이스 커넥션 풀이나 네트워크 소켓을 관리하는등의 일이 있을 수 있다
이를 위해 스프링빈에서는 이를 지원하기 위해 이전부터 다음과 같은 콜백들을 지원해왔다.
1. 인터페이스 InitializingBean, DisposableBean
*ac.close()를 쓰기 위해선 ConfigurableApplicationContext 컨테이너를 써야한다
InitializingBean은 afterPropertiesSet() 메소드로 초기화를 지원한다. 객체가 생성되고 난 직후에 실행된다.
DisposableBean은 destroy() 메소드로 소멸을 지원한다. 객체가 소멸되기 직전에 실행된다.
단점
- 스프링 전용 인터페이스다. 해당 코드가 스프링 전용 인터페이스에 의존한다.
- 초기화, 소멸 메소드의 이름을 변경할 수 없다.
- 내가 고칠 수 없는 외부 라이브러리에 적용할 수 없다
*인터페이스를 활용하는 방식은 스프링 초창기에 나온 방법들로 지금은 거의 사용하지 않는다
빈 등록 초기화, 소멸 메소드 지정
설정 정보에 @Bean(initMethod = "init", destroyMethod = "close")를 지정해 초기화, 소멸 콜백을 지정 할 수 있다
* @Bean에 설정 정보를 세팅해주는 방식이다
특징
- 메소드 이름을 자유롭게 줄 수 있다.
- 스프링 빈이 스프링 코드에 의존하지 않는다
- 코드가 아니라 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료 메소드를 적용 할 수 있다.
종료메소드 추론
- @Bean의 destroyMethod 속성은 기본 값이 'infered'(추론)로 되어있다.
- destroyMethod를 따로 지정해주지 않는다고해도 추론 기능덕에 close, shutdown이라는 이름의 메소드를 자동으로 호출해준다. 이름 그대로 종료 메소드를 추론해서 호출해준다.
애노테이션 @PostContruct, @PreDestroy
*import 구문을 보면 Spring이 아니라 java의 표준을 따르고 있는것을 볼 수 있다
특징
- 최신 스프링에서 가장 권장하는 방법이다
- 사용하는 패키지가 javax.annotation.PostConstruct이다. 스프링에 종속적인 기술이 아니라 JSR-250이라는 자바 표준으로 스프링이 아닌 다른 컨테이너에서도 잘 동작한다
- 유일한 단점은 외부 라이브러리에는 적용하지 못한다는 것이다. 외부 라이브러리를 초기화, 종료 해야 하면 @Bean의 기능을 사용하자.
References
https://en.wikipedia.org/wiki/Callback_(computer_programming)
Callback (computer programming) - Wikipedia
A function provided as an argument to another function to be called during its execution A callback is often back on the level of the original caller. In computer programming, a callback, also known as a "call-after"[1] function, is any executable code tha
en.wikipedia.org
https://stackoverflow.com/questions/824234/what-is-a-callback-function/7549753#7549753
What is a callback function?
What is a callback function?
stackoverflow.com