반응형
⌗ 오류 현상
**************************
APPLICATION FAILED TO START
***************************
Description:
The dependencies of some of the beans in the application context form a cycle:
testApplication
┌─────┐
| garbageRemoveServiceImpl defined in file [/Documents/DevSource/test/classes/com/example/service/TestA.class]
↑ ↓
| garbageCouponIssueServiceImpl defined in file[/Documents/DevSource/test/classes/com/example/service/TestB.class]
└─────┘
⌗ 해결 방법
생성자를 통해 빈을 주입했을 때, 빈 순환(testA → testB → testA..) 참조로 인해
참조하는 빈과 참조되는 빈이 서로를 동시에 참조하는 현상으로 발생한다.
@Lazy 어노테이션 사용
@Component
public class TestA {
private TestB testB;
public TestA(@Lazy TestB testB) {
testB = testB;
}
}
기본적인 원리로 서로 빈이 생성되는 시기를 늦추거나 조율해서 동시에 참조하는 것을 늦추는 어노테이션을 사용하면 된다.
즉, 하나의 빈이 생성이 완료된 후 다른 빈이 동작하게끔 하는 것이다.
그런데 결국 빈 순환 참조가 나는 것은 모델링 설계가 잘못되었다는 아주 불길한 징조이다.
따라서 임시적인 해결책이 아닌 근본적으로 모델링을 다시 살펴보는 것이 중요할 듯 하다.
[참고] https://umanking.github.io/spring/2019/04/12/spring-circulation-issue.html
반응형