본문 바로가기
IT/Spring

[Spring][Error] The dependencies of some of the beans in the application context form a cycle

by 강천구 2022. 7. 10.

 

Spring 혹은 Spring boot를 사용하여 서버 개발을 하다보면 아래와 같은 오류가 발생하며 실행이 안될 때가 있다.

 

 

Description:

The dependencies of some of the beans in the application context form a cycle:

┌─────┐
|  userService (field private xxxxx)
↑     ↓
|  securityService (field private xxxxx)
└─────┘


Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

 

 

이것은 Bean userService → Bean securityService → Bean userService 구조로 서로를 참조하여 순환에 빠지게된 상태이다.

이때 application.yml에 설정을 추가하거나 순환 참조를 끊어 해결해야한다.

반응형

 

1. application.yml 에 spring.main.allow-circular-references: true 설정을 추가한다.

    꼭 필요한 경우가 아니면 순환고리를 끊는 방향이 좋다.

spring:
  main:
    allow-circular-references: true

 

 

2. 순환 종속성이 필요하지 않도록 구성 요소를 적절하게 다시 설계하여 순환을 끊어줘야한다. 새로운 서비스 파일을 이용하거나 필요한 함수만 복사하여 넣어줌으로써 순환을 끊어줘도 된다.

 

 

3. @Lazy 혹은 @PostConstruct를 사용한다.

@Component
public class UserService {

    private SecurityService securityService;

    @Autowired
    public UserService(@Lazy SecurityService securityService) {
        this.securityService = securityService;
    }
}
@Component
public class UserService {

    @Autowired
    private SecurityService securityService;

    @PostConstruct
    public void init() {
        securityService.setUserService(this);
    }

    public SecurityService getSecurityService() {
        return securityService;
    }
}
반응형

댓글