• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

순환참조와 bean 주입에 대한 질문입니다!

23.06.02 02:35 작성 23.06.02 02:36 수정 조회수 217

0

순환참조에 있어서 생성자 주입이 컴파일 타임에서 잡아낼 수 있는 이유가 빈을 주입하는 순서가 달라서라고 인터넷 서칭을 하다 알게 되었는데요,

이해한 바로는 생성자 주입은 빈을 생성 + 주입을 동시에 하고,

세터 주입, 필드 주입은 빈을 생성하고, 주입하는 단계가 나뉘어 있어 컴파일 타임에 잡지 못한다고 이해를 했는데, 맞을까요?

만약 맞다면, 생성자 주입 또한 생성 + 주입 시에 빈팩토리에서 찾아서 없다면 생성 후에 넣으면 되는 것인데, 왜 컴파일 오류가 나는지 이해가 가지 않습니다. 만약 순환참조로 생성조차 안된다면 세터주입, 필드주입 또한 실행되지 않는게 맞지 않나요?? (아래는 제가 참고한 블로그의 글입니다)

관련해서 공식문서를 참고해보고 싶은데, 어느부분을 찾아봐야 할지 잘 모르겠습니다 ㅠ

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.06.04

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

순환참조와 빈 주입에 관한 질문이시군요!

순환참조는 빈들 간에 서로 참조하는 경우를 말하는데요, 이 때 생성자 주입을 사용하면 순환참조를 컴파일 타임에서 잡아낼 수 있습니다. 생성자를 호출하는 시점에서 모든 빈들이 생성되기 때문인데, 이 때 모든 빈들이 생성이 되어있는 상태이기 때문에 순환참조를 발생시킬 가능성이 없습니다.

그리고 생성자 주입외에도 다른 주입 방법들도 빈들 간의 순환참조를 해결할 수 있습니다. 예를 들어, Setter 주입은 생성자 주입과 달리 빈으로 생성된 이후에 주입이 되므로 순환참조가 발생할 수 있다는 단점이 있습니다.

반면에, 순환참조로 인해 컴파일 오류가 발생하는 이유는 빈들의 생성과 주입이 모두 끝난 후에도 순환참조 때문에 상호 참조할 수 없고, 빈 생성 과정에서도 순환참조가 발생하지 않으므로 빈 주입에 대한 순환참조는 컴파일 타임에 확인할 수 없다는 점이죠.

공식 문서에서 순환참조에 대한 내용은 “Circular Dependencies”라는 제목으로 나와 있습니다. 자세한 내용은 아래 링크를 참고해보시기 바랍니다.
https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-dependency-resolution