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

d1215님의 프로필 이미지
d1215

작성한 질문수

스프링 핵심 원리 - 기본편

빈 라이프 싸이클과 PostConstruct, PreConstruct 질문입니다.

작성

·

529

0

1. 스프링빈은 객체를 생성한다.
2. 의존관계 주입을 한다.
3. 이후 필요한 데이터를 사용 할 수 있는 준비가 된다.
 
강의 듣다가 명확하게 이해하고 싶어서 질문드립니다.
 
의존관계 주입후 필요한 데이터를 사용 할 수 있는 준비가 된다고 하는데
그렇다면 생성자로 모든 데이터와 DB 커넥션을 해주는 작업을 한다면
 
의존관계주입이 발생될때 해당 초기화 했던 작업들은 다 무시가 되나요?

답변 1

1

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

.
그렇지 않습니다.

만약 생성자 주입을 사용하신다면 생성자를 호출할 때 의존관계가 주입되므로 생성자 내에서 초기화 되는 데이터는 영향을 받지 않습니다

또한 수정자 주입을 사용하시더라도 의존관계 주입이 필요한 필드의 수정자에 대해서만 동작하므로 생성자 내에서 초기화 되는 데이터는 영향을 받지 않습니다.
.
감사합니다.

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

그럼 굳이 post 와 pre 를 사용하는 이유가 있을까요?! 

제가 이해한 거로는 간단한 초기화는 생성자에서서복잡한 초기화는 주입이 끝난후 로 이해했는데 

굳이 나눠서 쓰는 이유가 궁금합니다

우선, 초기화에 대해서는 이해하신게 맞습니다.

postConstruct는 빈이 생성된 직후에 동작하고

preDestroy는 빈이 소멸되지 직전에 동작합니다

서로 역할이 다르므로 나눠서 사용됩니다.

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

그러면 생성자 에서 초기화 하는 대신 postConstruct 를 왜써야 하는가 물어보면

 

생성자에선 간단한 초기화를 하고

주입이 끝난뒤 복잡한 초기화를 하려고

postConstruct를 쓴다 라고 하면 될까요??

 

분명 더 깊은 이유가 있을것 같아서요

생성자가 호출될 때에는 의존관계 주입이 완료되지 않은 상태입니다.

postConstruct를 써야 하는 상황은 의존관계 주입이 완료된 후 어떠한 작업(ex 의존관계 주입을 필요로 하는 초기화 작업)입니다.

아마 복잡한 초기화라는 말은 의존관계 주입이 끝난 뒤 할 수 있는, 해야하는 작업을 말하는 것 일 겁니다.

이 이상의 이유는 저도 잘 모르겠네요ㅎㅎ;

d1215님의 프로필 이미지
d1215

작성한 질문수

질문하기