스프링 - 순환 종속성
콩 A → 콩 B → 콩 C → 콩 D → 콩 E → 콩 A
또는 더 간단한 방법으로
콩 A → 콩 B → 콩 A
모든 것이 👌면 어떨까요?
대신 다음과 같은 것이 있습니다.
콩 A → 콩 B → 콩 C
Spring은 bean C를 생성하고, bean B를 생성하고(그리고 bean C를 거기에 주입한다), 그리고 나서 bean A를 생성한다(그리고 bean B를 주입한다).
그러나 순환 종속성을 사용하면 Spring은 상호 종속적이기 때문에 어떤 Bean을 먼저 생성해야 하는지 결정할 수 없습니다. Spring은 이러한 상황에서 컨텍스트를 로드하는 동안 BeanCurrentlyInCreationException을 발생시킵니다.
When implementing constructor injection in Spring, this can happen. We shouldn't have this problem if we utilize other sorts of injections because dependencies will be injected only when they're needed, not when the context is loaded. ❗
그것을 고칠 방법이 있습니까? 🤔
재설계(웃음)
@Lazy 사용
Bean 중 하나를 지연 초기화하도록 Spring에 지시하는 것은 주기를 중지하는 간단한 방법입니다. 결과적으로 bean을 완전히 초기화하는 대신 다른 bean에 주입될 프록시를 생성합니다. 주입된 빈이 처음 필요할 때 완전히 생성됩니다.
@Component
public class CircularDependencyA {
private CircularDependencyB circB;
@Autowired
public CircularDependencyA(@Lazy CircularDependencyB circB) {
this.circB = circB;
}
}
세터/필드 주입 사용
Spring은 bean을 생성하지만 종속성은 이러한 방식으로 필요할 때까지 주입되지 않습니다.
Reference
이 문제에 관하여(스프링 - 순환 종속성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yigi/spring-circular-dependency-hln텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)