오늘 스프링 입문주차 강의를 들으면서 의존성 주입하는 방식이 처음 공부할 때 배웠던 내용과 달라서 해당 내용을 정리해보려 한다.
먼저 내가 알고 있던 방식은
@Service
public class ExampleService {
@Autowired
private Example example;
}
이런 형태로 어노테이션을 붙여 필드에 의존성을 주입하는 방법이였다.
하지만 @Autowired는 어노테이션을 사용하여 간편하게 간결한 코드를 작성할 수 있지만 순환참조(circular dependency)가 발생할 가능성과 어떤 의존성이 주입되는지 파악하기 어렵다는 단점이 있다
따라서 @RequiredArgsConstructor 어노테이션을 사용한 생성자 주입을 더 권장하고 있다는게 대부분의 의견이라고 한다.
@Service
@RequiredArgsConstructor
public class ExampleService {
private final Example Repository
}
// 여담
과거 같이 공부하던 지인이 Autowired를 사용하다 순환참조 오류 발생에 고통받는 것을(순환참조는 런타임에러라 잘 안보인다..) 보았기에 그 이후로 private final을 사용해야겠다고 생각했던 적이 있다.