Tech/Spring | Spring Boot
[Spring] 의존성 주입 (Dependency Injection)
싱브이
2023. 9. 22. 15:18
728x90
반응형
인프런 - 백기선님의 예제로 배우는 스프링 입문(개정판)을 수강하며 정리한 글입니다.
의존성 주입 방법
* Spring IoC 컨테이너에 의한 의존성 주입은 빈(Bean) 끼리만 가능하다.
1. 생성자 주입
@Component
public class SampleController {
private SampleRepository sampleRepository;
@Autowired
public SampleController(SampleRepository sampleRepository) {
this.sampleRepository = sampleRepository;
}
}
생성자에 @Autowired
*Spring 4.3부터는 클래스의 생성자가 하나이고, 그 생성자로 주입받을 객체가 빈으로 등록되어 있다면 @Autowired 생략가능
2. 필드 주입
@Component
public class SampleController {
@Autowired
private SampleRepository sampleRepository;
}
변수 선언부에 @Autowired
3. Setter 주입
@Component
public class SampleController {
private SampleRepository sampleRepository;
@Autowired
public void setSampleRepository(SampleRepository sampleRepository) {
this.sampleRepository = sampleRepository;
}
}
Setter 메소드에 @Autowired
어떤걸 사용해야할까?
Spring framework reference에서 권장하는 방법은 생성자 주입이다.
생성자를 사용하는 방법이 좋은 이유는 필수적으로 사용해야하는 reference(의존성) 없이는 인스턴스를 만들지 못하도록 강제할 수 있기 때문이다.
SampleController가 SampleRepository 없이는 제대로 동작할 수 없다면 SampleController 입장에서 SampleRepository는 반드시 있어야 하는 객체이다.
그것을 강제할 수 있는 가장 좋은 방법이 생성자 주입 방법을 쓰는것이다.
* 순환 참조(Circular Dependency) : A가 B를 참조하고 B가 A를 참조하는 상태
순환 참조 관계인 클래스들에 둘 다 생성자 주입을 사용한다면 인스턴스도 생성할 수 없고, 애플리케이션이 실행되지 않는다.
순환 참조를 발생하지 않게 못하거나, 어쩔수 없는 상황이라면 필드나 setter 주입 방법을 사용할 수 있다.
728x90
반응형