서로 다른 빈(Bean)이 서로를 참조하면서 스프링이 어떤 빈을 먼저 생성해야 할지 결정하지 못하기 때문에 발생한다.
순환 참조는 DI 상황에 발생한다. DI 방법은 Setter, 필드, 생성자 방식으로 3가지가 있다.
PasswordEncoder Bean을 SecurityConfiguration 외부에서 등록되도록 분리해야 한다.
PasswordEncoderConfig 클래스를 만들어 이 클래스에서 PasswordEncoder Bean을 생성하도록 하자
@Configuration
public class PasswordEncoderConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}