A -> B 를 참조하고, B -> A를 참조할 경우 순환 의존관계를 형성한다.
이는 BeanCurrentlyInCreationException
을 발생한다.
다음은 순환 의존관계를 가지는 코드다.
class A {
private final B b;
A(B b) {
this.b = b;
}
}
class B {
private final A a;
B(A a) {
this.a = a;
}
}
@Configuration
class CircularConfig {
@Bean
public A a(B b) {
return new A(b);
}
@Bean
B b(A a) {
return new B(a);
}
}
public class CircularDepTester {
public static void main(String[] args) {
var annotationConfigApplicationContext =
new AnnotationConfigApplicationContext(CircularConfig.class);
}
}
실행하면 다음과 같이 오류를 볼 수 있다.
애플리케이션을 실행하면 이제 스프링 컨테이너(IoC)는 A 빈을 생성하기위해 B를 주입해줘야하기 때문에 B를 찾는다.
근데 B를 생성하려 하니 A를 주입하기위해 A를 찾게되면서 무한 반복이 생긴다.