해결된 질문
작성
·
1.1K
·
수정됨
1
■ 발생에러
Description:
The dependencies of some of the beans in the application context form a cycle:
memberController defined in file [C:\Users\----\Documents\coding_study\spring_boot\hello-spring\out\production\classes\hello\hellospring\controller\MemberController.class]
↓
memberService defined in class path resource [hello/hellospring/SpringConfig.class]
┌─────┐
| timeTraceAop defined in class path resource [hello/hellospring/SpringConfig.class]
└─────┘
Action:
Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.
---------------------------------------------------------------------------------------------------
■ 질문사항
안녕하세요. 수고 많으십니다.
강의 진행 중 발생한 순환참조오류에 대해 알고싶습니다.
스프링 입문 - 섹션7. AOP적용 강의 진행 중 발생한 에러입니다.
스프링 빈을 등록할 때 @Component 어노테이션을 사용해 컴포넌트 스캔을 진행하거나 SpringConfig파일에서 @bean 어노테이션을 사용해 빈을 등록하거나 둘 중 어떤 것을 사용해도 된다고 알고있습니다.
SpringConfig파일에서 등록할 때는 순환참조오류가 발생하고, TimeTraceAop 클래스에 @Component 어노테이션을 사용하면 해당 오류가 발생하지 않는 것을 확인했습니다.
구글링을 통해 해당 에러가 순환 참조 오류로, 순환 참조가 발생한다면 스프링은 어느 빈을 먼저 생성해야 할지 결정하지 못하게 되어 발생하게 된다는 것을 알았습니다.
하지만 순환참조오류가 발생하는 원인만 알았을 뿐,
1. 실제로 timeTraceAop가 왜 순환참조에 갇히게 되었는지 잘 모르겠습니다.
2. 왜 SpringConfig에서 등록하는 것과 @Component 어노테이션을 사용한 결과에 차이가
발생하는 것인가요?
이해를 도와주시면 감사하겠습니다.
답변 1
0