Beans that are singleton-scoped and set to be pre-instantiated (the default) are created when the container is created.

Scopes are defined in Section 5.5, “Bean scopes” Otherwise, the bean is created only when it is requested. Creation of a bean potentially causes a graph of beans to be created, as the bean’s dependencies and its dependencies’ dependencies (and so on) are created and assigned.

이런 동작 원리 때문에, Bean들 간의 circular dependency가 직접 발생하지 않더라도, Configuration 간의 circular dependency가 발생하며 다음과 같은 에러를 발생할 수 있다.

Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘xxx’: Requested bean is currently in creation: Is there an unresolvable circular reference?

이는 Spring의 default 설정에 따라 빈들이 컨텍스트 생성 시점에 모두 생성되기 때문으로 보인다. 하나의 Config 속 빈들이 생성되는 동안 의존성이 발견 되면 해당 빈들을 먼저 생성하려 하고, 이때 빈은 컨텍스트가 생성될 때 생성된다는 조건에 따라 해당 빈이 들어있는 Config를 컨텍스트로 생성하려 하기 때문이다. A, B 두 개의 Config에 직접적으로 circular dependency가 있는 bean이 없더라도 A의 빈 중의 하나가 B의 빈을 필요로하고, B의 다른 빈 하나가 A의 다른 빈 하나를 필요로 하면 빈 생성 과정에서 circular reference가 발생한다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요: 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

search previous next tag category expand menu location phone mail time cart zoom edit close