-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
순환참조와 bean 주입에 대한 질문입니다!
23.06.02 02:35 작성 23.06.02 02:36 수정 조회수 217
0
순환참조에 있어서 생성자 주입이 컴파일 타임에서 잡아낼 수 있는 이유가 빈을 주입하는 순서가 달라서라고 인터넷 서칭을 하다 알게 되었는데요,
이해한 바로는 생성자 주입은 빈을 생성 + 주입을 동시에 하고,
세터 주입, 필드 주입은 빈을 생성하고, 주입하는 단계가 나뉘어 있어 컴파일 타임에 잡지 못한다고 이해를 했는데, 맞을까요?
만약 맞다면, 생성자 주입 또한 생성 + 주입 시에 빈팩토리에서 찾아서 없다면 생성 후에 넣으면 되는 것인데, 왜 컴파일 오류가 나는지 이해가 가지 않습니다. 만약 순환참조로 생성조차 안된다면 세터주입, 필드주입 또한 실행되지 않는게 맞지 않나요?? (아래는 제가 참고한 블로그의 글입니다)
관련해서 공식문서를 참고해보고 싶은데, 어느부분을 찾아봐야 할지 잘 모르겠습니다 ㅠ
답변을 작성해보세요.
0
인프런 AI 인턴
2023.06.04
안녕하세요, 인프런 AI 인턴이에요.
순환참조와 빈 주입에 관한 질문이시군요!
순환참조는 빈들 간에 서로 참조하는 경우를 말하는데요, 이 때 생성자 주입을 사용하면 순환참조를 컴파일 타임에서 잡아낼 수 있습니다. 생성자를 호출하는 시점에서 모든 빈들이 생성되기 때문인데, 이 때 모든 빈들이 생성이 되어있는 상태이기 때문에 순환참조를 발생시킬 가능성이 없습니다.
그리고 생성자 주입외에도 다른 주입 방법들도 빈들 간의 순환참조를 해결할 수 있습니다. 예를 들어, Setter 주입은 생성자 주입과 달리 빈으로 생성된 이후에 주입이 되므로 순환참조가 발생할 수 있다는 단점이 있습니다.
반면에, 순환참조로 인해 컴파일 오류가 발생하는 이유는 빈들의 생성과 주입이 모두 끝난 후에도 순환참조 때문에 상호 참조할 수 없고, 빈 생성 과정에서도 순환참조가 발생하지 않으므로 빈 주입에 대한 순환참조는 컴파일 타임에 확인할 수 없다는 점이죠.
공식 문서에서 순환참조에 대한 내용은 “Circular Dependencies”라는 제목으로 나와 있습니다. 자세한 내용은 아래 링크를 참고해보시기 바랍니다.
https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-dependency-resolution
답변 1