이번 시간에는 빈을 등록하는 시점에 초기화인지, 소멸인지 지정해주는 방법에 대해서 알아보았다.
방법은 간단하다.
설정 정보에 @Bean(initMethod = "init", destroyMethod = "close") 처럼 초기화, 소멸 메서드를 지정할 수 있다.
init과 close 메소드를 위와 같이 작성해준다.
그리고 맨 처음에 언급한 것과 같이, @Bean(initMethod = "init", destroyMethod = "close") 을 추가하여
초기화, 소멸 메소드를 지정해준다.
테스트를 돌려보면, init과 close가 정상적으로 호출된 것을 볼 수 있다.
설정 정보 사용의 특징을 살펴보면,
- 메서드 이름을 자유롭게 줄 수 있다.
- 스프링 빈이 스프링 코드에 의존하지 않는다.
- 가장 큰 장점으로는, 코드가 아니라 설정 정보를 사용하기 때문에 코드를 고칠 수 없는 외부 라이브러리에도 초기화, 종료 메소드를 적용할 수 있다.
@Bean의 destroyMethod 속성에는 특별한 기능이 있는데, 라이브러리는 대부분 close나 shutdown 이라는 종료 메소드를 사용한다.
그래서 @Bean의 destroyMethod는 기본값이 추론한다는 뜻의 '(inferred)' 로 등록되어 있다.
이 추론 기능은 close, shutdown 이라는 이름의 메소드를 자동으로 호출해준다.
이름 그대로 종료 메소드를 추론해서 호출해준다.
따라서 직접 스프링 빈으로 등록하면 종료 메소드는 따로 적어주지 않아도 잘 동작한다. (대부분 close나 shutdown으로 되어있기 때문ㅋㅋㅋ)
반대로, 추론 기능을 사용하기 싫다면 destoryMethod="" 와 같이 빈 공백으로 지정하면 된다.
댓글