Circular Dependency

이한주·2023년 3월 10일
0

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를 찾게되면서 무한 반복이 생긴다.

0개의 댓글