이전 글에서 의존성 주입을 설명하면서 의존성 주입 종류에 대한 내용 또한 설명했는데, 이번 글에서는 Spring Framework에서 지원하는 의존성 주입에 대해 알아보는 시간을 가지겠습니다.
의존성 주입의 종류에는 다음과 같은 종류가 있습니다.
//변수 선언부에 @Autowired Annotation을 붙인다.
@Component
public class SampleController {
@Autowired
private SampleService sampleService;
}
그런데 필드주입을 하면 Intellij에서 다음과 같은 주의를 주며 Spring 최신 버전에서는 @Autowired의 사용을 지양하고 있습니다. 이유가 무엇일까요?
@Component
public class SampleController {
private SampleService sampleService;
@Autowired
public void setSampleService(SampleService sampleService) {
this.sampleService = sampleService;
}
}
Constructor Injection(생성자 주입)
@Component
public class SampleService {
private SampleDAO sampleDAO;
@Autowired
public SampleService(SampleDAO sampleDAO) {
this.sampleDAO = sampleDAO;
}
}
앞서 말했듯 최신 Spring Framework 버전에서는 순환 참조 및 SRP, Immutable 등 다양한 이유로 생성자 주입 방식으로 의존성을 주입하는 것을 권장하고 있습니다.
선택적으로 필요한 의존성 주입에 한하여 Setter Injection
을 권장하며 Feild Injection 방식은 아예 머릿속에서 지우는게 좋을 것 같습니다.