작성
·
18
0
안녕하세요 선생님 강의 듣다가 질문이 생겨서 글 작성해봅니다 제가 알기로 스프링 2.6 ? 이상에서 순환 참조가 자동으로 비활성 되어서 private final ObjectProvider<CallServiceV2> callServiceProvider; 을 사용해도 lazy 조회가 되지 않는것으로 알고 있습니다 그래서 application.yml 파일에서 이 설정을 true 로 바꿔주거나 test 시
@TestPropertySource(properties = "spring.main.allow-circular-references=true")
이 어노테이션을 추가하려 순환 참조를 활성화 시킨 후에 테스트 해봐야지만 정상 작동 되는걸로 알고 있는데 제가 알고 있는 내용이 다른지 궁금합니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. mine702님.
spring 2.6 버전부터 순환 참조가 기본적으로 허용되지 않게 변경되었으므로 여러분이 언급한 것처럼 spring.main.allow-circular-references=true
설정을 통해 활성화해야 이전 방식처럼 사용할 수 있습니다.
순환 참조란 두 개 이상의 빈이 서로를 필요로 하는 상황을 말합니다. Spring 2.6부터는 이와 같은 순환 참조 설정을 허용하지 않도록 기본 정책이 변경되었으며, 이것은 애플리케이션에서 의존성 관리를 명확히 하기 위함입니다.
ObjectProvider
를 사용하더라도 자동으로 lazy loading을 지원하는 것이 아니므로, 필요에 따라 명시적으로 Lazy를 설정해주거나 위의 속성을 활성화해야 합니다. 따라서 @TestPropertySource(properties = "spring.main.allow-circular-references=true")
와 같은 설정을 통해 테스트 환경에서 순환 참조를 일시적으로 허용하면 정상적으로 작동할 것입니다.
더 많은 정보를 확인하시려면 아래 유사한 질문과 답변을 참고해 보세요:
- setter에 @Autowired 쓰는 문법은 이제 막힌건가요?
- 내부호출 : 자기자신 주입
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.