관리 메뉴

제뉴어리의 모든것

The dependencies of some of the beans in the application context form a cycle 에러 본문

BugNote

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

제뉴어리맨 2022. 10. 4. 01:04

에러 상황 :

프로젝트를 Run 할때 발생.

 

 

에러 내용 :

 

Description:

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

┌─────┐
|  securityConfiguration defined in file [클래스의 실 경로]
↑     ↓
|  memberService defined in file [클래스의 실 경로]
└─────┘


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.

Disconnected from the target VM, address: '127.0.0.1:13089', transport: 'socket'

Process finished with exit code 1

 

에러 분석 :

빈을 생성하고 주입을 할때, 순 두개의 빈이 순환 형태여서 발생하는 문제.

 

 

 

 

발생 코드 :

관련 없는 코드의 내용은 지웠다

  • MemberService
@RequiredArgsConstructor
@Transactional
@Service
public class MemberService {

    private final MemberRepository repository;
    private final CustomAuthorityUtil authorityUtil;
    private final PasswordEncoder passwordEncoder; // (1) 문제의 주입

   	:
    :
    :
}

(1) : 생성자에서 PasswordEncoder를 DI 받고 있다

  • SecurityConfiguration
@RequiredArgsConstructor
@Configuration
public class SecurityConfiguration {

    private final JwtTokenizer jwtTokenizer;
    private final CustomAuthorityUtil customAuthorityUtil;
    private final RedisTemplate redisTemplate;
    private final MemberService memberService; // (1) 문제의 주입


    //비밀번호 암호화를 위해
    @Bean   // (2) 문제의 빈 등록
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }

   

}

(1) : 생성자에서 MemberService를 DI 받고 있다

(2) : PasswordEncoder를 빈으로 등록

 

 

에러 원인

만약 MemberService를 먼저 생성한다면, 생성하는 도중에 PasswordEncoder를 필요로 한다.

그래서 PasswordEncoder를 빈으로 등록하는 Configuration 클래스인 Securityconfiguration를 빈으로 등록하기 위해 생성하고 빈으로 등록하려는데 생성자에 MemberService가 인자로 있다.

그렇게 두개의 객체 사이에 순환이 형성된다.

 

 

해결 방법

연결 관계를 끊자.

 

 

 

 

참조 : https://precioustar.tistory.com/66