순환참조와 bean 주입에 대한 질문입니다!
407
14 asked
순환참조에 있어서 생성자 주입이 컴파일 타임에서 잡아낼 수 있는 이유가 빈을 주입하는 순서가 달라서라고 인터넷 서칭을 하다 알게 되었는데요,
이해한 바로는 생성자 주입은 빈을 생성 + 주입을 동시에 하고,
세터 주입, 필드 주입은 빈을 생성하고, 주입하는 단계가 나뉘어 있어 컴파일 타임에 잡지 못한다고 이해를 했는데, 맞을까요?
만약 맞다면, 생성자 주입 또한 생성 + 주입 시에 빈팩토리에서 찾아서 없다면 생성 후에 넣으면 되는 것인데, 왜 컴파일 오류가 나는지 이해가 가지 않습니다. 만약 순환참조로 생성조차 안된다면 세터주입, 필드주입 또한 실행되지 않는게 맞지 않나요?? (아래는 제가 참고한 블로그의 글입니다)
관련해서 공식문서를 참고해보고 싶은데, 어느부분을 찾아봐야 할지 잘 모르겠습니다 ㅠ
Answer 1
0
안녕하세요, 인프런 AI 인턴이에요.
순환참조와 빈 주입에 관한 질문이시군요!
순환참조는 빈들 간에 서로 참조하는 경우를 말하는데요, 이 때 생성자 주입을 사용하면 순환참조를 컴파일 타임에서 잡아낼 수 있습니다. 생성자를 호출하는 시점에서 모든 빈들이 생성되기 때문인데, 이 때 모든 빈들이 생성이 되어있는 상태이기 때문에 순환참조를 발생시킬 가능성이 없습니다.
그리고 생성자 주입외에도 다른 주입 방법들도 빈들 간의 순환참조를 해결할 수 있습니다. 예를 들어, Setter 주입은 생성자 주입과 달리 빈으로 생성된 이후에 주입이 되므로 순환참조가 발생할 수 있다는 단점이 있습니다.
반면에, 순환참조로 인해 컴파일 오류가 발생하는 이유는 빈들의 생성과 주입이 모두 끝난 후에도 순환참조 때문에 상호 참조할 수 없고, 빈 생성 과정에서도 순환참조가 발생하지 않으므로 빈 주입에 대한 순환참조는 컴파일 타임에 확인할 수 없다는 점이죠.
공식 문서에서 순환참조에 대한 내용은 “Circular Dependencies”라는 제목으로 나와 있습니다. 자세한 내용은 아래 링크를 참고해보시기 바랍니다.
https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-dependency-resolution
jar 안되는 분들 참고하세요
0
359
1
mvnw 오류
0
463
1
./mvnw package 오류
0
421
2
java -jar target/*.jar 명령어 오류..
0
446
2
./mvnw package 오류
0
279
0
./mvnw package 오류
0
210
1
실행 상태에서 변경내용이 바로 반영되나요 ??
0
225
1
도와주세용 ㅜㅜ
0
206
1
./mvnw package 오류
0
318
1
클론 받은 내용과 수업내용이
0
399
1
./mvnw package 오류
0
1144
2
jdk 버전이 자꾸 낮다면서 오류가 발생합니다.
0
891
1
age가 화면에 표시가 안됩니다.
0
395
0
에러가 뜨는데 어떻게 해야할지 도저히 모르겠어요
0
1642
1
PetClinicApplication() 함수에서 run 을 하고 싶습니다...
0
520
0
h2와 hsqldb가 어떤차이가 있는건지 궁금합니다
0
1244
0
예제가 이전과 다르네요
0
370
0
메이븐으로 설정했는데 그래들이 같이 보일수 있나요?
0
573
1
LogAspect
0
326
1
구현체가 2개 이상일때 생성자 주입
0
366
1
의존성 주입 방법들 장단점
0
493
1
인스턴스의 생명주기와 제어권
0
311
1
IoC 컨테이너 안에 있는 객체들끼리만 의존성 주입
0
372
1
ExampleRepository exampleRepository = new ExampleRepository()
0
247
1

