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

donkey님의 프로필 이미지
donkey

작성한 질문수

스프링 핵심 원리 - 기본편

애노테이션 @PostConstruct, @PreDestroy

외부라이브러리 호출

작성

·

422

0

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

[질문 내용]
설정정보로 등록하면 외부라이브러리에도 초기화, 종료메서드를 적용할 수 있다는 것은 이해가 되었는데요.

그 외에는 외부라이브러리에 적용할수 없다는 말이 무슨 의미인지 잘 모르겠습니다. 질문을 여럿 찾아봤는데 질문이 조금 달라서..해결이 안됬네요

DB커넥션 예를 들면, 초기화, 종료 메서드를 단순히 애노테이션(@PostConstruct, @PreDestroy)이 등록된 메서드안에서 호출하면, 그 안에서 호출된 여러 라이브러리 메서드처럼 결국엔, 굳이 설정정보사용안하고도 사용할수 있다(적용할수 있다)고 볼수 있는거 아닌가라고 생각이 듭니다.

제가 지금 잘못 이해한거 같긴한데, 어디 부분을 잘못 이해해서 이런 생각을 하는건지 잘 모르겠습니다.

 

답변 1

0

안녕하세요. 노동자님, 공식 서포터즈 David입니다.

아래 글 답변을 확인해 주세요:)

https://www.inflearn.com/questions/307942

감사합니다.

donkey님의 프로필 이미지
donkey
질문자

네 어느정도 이해는 되었는데요.

외부라이브러리 메서드 초기화, 해제 적용시 빈 설정을 써야할 이유를 잘 모르겠습니다.

애노테이션이 선언된 메서드 안에서

@PostConstruct
public void init() {
    System.out.println("NetworkClient.init");
    connect();
    call("초기화 연결 메시지");
}

외부라이브러리의 메서드 connect, close들을 직접 호출하면 되지 않나요?

 

특정 객체(NetworkClient)로 init, destory를 wrapping 하지 않고 외부 라이브러리로부터 객체를 생성해야 하는 경우에는 코드 수정이 어려우므로 빈 설정을 통해 진행해야 합니다.

@Configuration
public class BeanConfig {
  @Bean(initMethod = "externalLibraryInit", destoryMethod = "externalLibraryDestory")
  public ExternalLibraryObject externalLibraryObject() {
    return new ExternalLibraryObject();
  }
}
donkey님의 프로필 이미지
donkey

작성한 질문수

질문하기