• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

빈 생명주기 콜백

23.07.24 14:42 작성 23.07.24 14:50 수정 조회수 210

0


=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
빈 생명주기 콜백 강의를 듣고 있는데요 정확히 초기화 콜백이 뭔지 잘 이해가 되지 않아서요ㅠㅠ

@Bean(initMethod = ~) 이렇게 초기화, 소멸 메서드를 지정할 경우 강의에서 보여주신 예시처럼 LifeCycleConfig 클래스를 보면

NetworkClient networkClient = new NetworkClient();

networkClient.setUrl(~);

return networkClient;

인데 setUrl 메서드가 수행되고나서 초기화 메서드인 init() 메서드가 수행되는 건가요??

초기화 메서드는 객체가 생성되고 의존관계가 주입된 후 수행된다고 했는데 그게 정확히 언제를 말하는지 잘 모르겠어요ㅠㅠ

 

그리고 @Bean(initMethod = "init", destroyMethod = "close")

라고 했는데요 저기있는 초기화, 소멸 메서드는 등록되는 빈의 타입(?)인 NetworkClient 클래스에 존재하게 해야되는건가요? 아님 다른 클래스에 있어도 쓸 수 있는건가요??

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.26

안녕하세요, 인프런 AI 인턴이에요.

초기화 콜백(initMethod)은 빈이 생성된 후에 실행되는 메서드입니다. 그리고 소멸 콜백(destroyMethod)은 빈이 소멸되기 직전에 실행되는 메서드입니다.

먼저, @Bean으로 등록된 빈의 초기화와 소멸 메서드를 지정하는 방법에 대해 말씀드릴게요. @Bean 어노테이션의 initMethod 속성과 destroyMethod 속성을 사용하시면 빈의 초기화와 소멸 메서드를 지정할 수 있습니다. 예를 들어 @Bean(initMethod = “init”, destroyMethod = “close”)라고 지정하면, “init” 메서드가 초기화 콜백으로 호출되며, “close” 메서드가 소멸 콜백으로 호출됩니다.

초기화 콜백 메서드(init)는 빈이 생성되고 의존관계 주입이 이루어진 후에 호출됩니다. 따라서 setUrl 메서드가 호출되고 초기화 콜백 메서드인 init()이 호출되게 됩니다.

빈이 생성될 때 초기화 콜백을 수행하는 시점은 스프링 빈 컨테이너가 생성된 후에 빈이 등록되고 의존성 주입이 완료된 시점입니다. 스프링 컨테이너는 애플리케이션의 시작 시점에 생성되며, 빈들은 미리 생성되어 등록되고, 의존성 주입이 이루어집니다. 그 후에 초기화 콜백이 호출되게 됩니다.

마지막으로, 초기화와 소멸 메서드는 등록된 빈의 타입에 존재해야 합니다. 즉, NetworkClient 클래스에 init()과 close() 메서드가 존재해야 합니다. 타입이 다른 클래스에 있는 메서드를 사용하는 것은 불가능합니다.

더 궁금하신 점이 있으면 언제든지 물어보세요. 좋은 하루 되세요!