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;
}
}
반응형
'IT > Spring' 카테고리의 다른 글
[Spring] 스프링 핵심 원리 - 기본편 (1) (0) | 2023.01.09 |
---|---|
[Spring][전문가를 위한 스프링 5] CH2. 스프링 시작하기 (0) | 2022.08.15 |
[Spring][전문가를 위한 스프링 5] CH1. 스프링 소개 (0) | 2022.07.23 |
[Spring] Intellij에서 Spring + Maven 시작하기 (Mac) (0) | 2022.07.14 |
[Java][Error] java.nio.charset.MalformedInputException: Input length = 1 (0) | 2022.07.10 |
댓글