본문 바로가기

Spring_SpringBoot/코드

빈 순환참조, 필드 주입, 생성자 주입

Spring Security도 DeadLock처럼 순환 참조가 생긴다. 알아보자.

 

1) 순환참조

우선 처음 나의 문제는 순환참조 문제였다.

3번 사진의 경우는 문제가 안 됐지만 순환참조가 일어났던 곳은 첫 번째 사진과 두 번째 사진이었다.

 

②번이 ⑤번에 의존성을 주입해서 사용하고 있고

④번이 첫번 째 사진의 CustomAuthenticationProvider에 의존성 주입을 해 사용하고 있다.

→ 결과적으로 서로 참조하는 관계가 생기므로 에러가 나는 것이다.

 

2) 생성자 주입

그 후 순환참조 문제로 인해서 ②번의 @Autowired를 뺀 "private passwordEncoder passwordEncoder"을 생성했다.

코드 상에서의 문제는 없지만 NullPointerException이 떨어졌는데 그것은 바로 필드 주입을 했기 때문이다.

@Autowired를 생성하게 되면 필드 주입을 해서 의존성을 주입하고 안에 있는 내용을 가져오게 되지만

@Autowired가 없으면 그 클래스의 껍데기만 가져오는 것이다. 결과적으로 @Autowired를 빼서

의존성을 주입하지 않았으므로 NullPointerException이 맞다.

→ 이로 인해 최종적으로 ③번 방식으로 직접 객체를 생성자로 만들어서 가져왔다. 즉 생성자 주입을 한 것이다.

    결국 CustomAuthenticationProvider의 경우는 직접적으로 의존성 주입을 한 것이 아니므로 순환 참조 에러가 나지

    않는다.