본문 바로가기

Issue

[Spring] 빈 순환 참조로 인한 오류 해결

반응형

오류 현상


**************************
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

 

Redirecting…

 

umanking.github.io

 

반응형

❥ CHATI Github