inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Spring nhập môn học bằng ví dụ (ấn bản sửa đổi)

Tiêm phụ thuộc

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

407

tjrwn0716

14 câu hỏi đã được viết

0

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

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

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

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

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

java spring

Câu trả lời 1

0

communityai8509

안녕하세요, 인프런 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