인프런 커뮤니티 질문&답변

김아현님의 프로필 이미지
김아현

작성한 질문수

스프링 핵심 원리 - 기본편

애노테이션 @PostConstruct, @PreDestroy

close()메서드는 왜 호출되어야 작동하나요?

작성

·

487

·

수정됨

0

init()과 다르게 호출되어야 작동하는게 단순 궁금해서 질문합니다

답변 1

0

안녕하세요. 김아현님, 공식 서포터즈 David입니다.

조금만 더 자세하게 설명해 주실 수 있으실까요?

감사합니다.

김아현님의 프로필 이미지
김아현
질문자

@PostConstruct init() 메서드랑

@preDestory close() 메서드

BeanLifeCycleTest 에서

@Test
void lifecycleTest(){
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class);
    ac.getBean(NetworkClient.class);
    ac.close();


}

ac.close() 써놔야

 

18:57:03.767 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@d5b810e, started on Fri Mar 17 18:57:03 KST 2023

위에처럼 Debug 결과가 나오는데

NetworkClient 클래스에있는 intit()함수는 적을 필요없이 자동으로 결과창에 뜨는데 ac.close()는 안적어놓으면 결과창에 안뜨는 특별한 이유가있을까요?

ac.close를 명시하지 않았을 경우, 좌측 테스트 목록 중 메서드 이름이 아닌, 클래스 이름 항목을 선택하시면 스프링이 내려갈 때 @PreDestroy 메서드가 동작하시는 걸 볼 수 있습니다.

@PostConstruct의 경우 테스트 메서드 내 컨테이너를 생성하는 과정(빈 등록 및 생성 포함)의 코드가 포함되었기 때문에 동작하는 것으로 보여집니다.

image

김아현님의 프로필 이미지
김아현

작성한 질문수

질문하기