Spring은 @Autowired
어노테이션을 이용한 다양한 의존성 주입 방법을 제공합니다.
@Autowired
어노테이션은 Spring에게 의존성을 주입하라는 지시자 역할로 쓰이는데 생성자, 필드, Setter에 붙일 수 있습니다.
Spring IoC 컨테이너에 의한 의존성 주입은 빈(Bean)끼리만 가능합니다.
생성자에 @Autowired
어노테이션을 붙여 의존성을 주입받을 수 있습니다.
@Autowired
를 생략할 수 있습니다.@Component
public class SampleController {
private SampleRepository sampleRepository;
@Autowired
public SampleController(SampleRepository sampleRepository) {
this.sampleRepository = sampleRepository;
}
}
변수 선언부에 @Autowired
어노테이션을 붙인다.
@Component
public class SampleController {
@Autowired
private SampleRepository sampleRepository;
}
Setter 메소드에 @Autowired
어노테이션을 붙인다.
@Component
public class SampleController {
private SampleRepository sampleRepository;
@Autowired
public void setSampleRepository(SampleRepository sampleRepository) {
this.sampleRepository = sampleRepository;
}
}
이 세개의 코드는 모두 동일하게 SampleController에 SampleRepository를 주입하도록 합니다.
Spring framework reference에서 권장하는 방법은 생성자를 통한 주입입니다.
생성자를 사용하는 방법이 가장 좋은 이유는 필수적으로 사용해야 하는 의존성 없이는 인스턴스를 만들지 못하도록 강제할 수 있기 때문입니다.
SampleController
가 SampleRepository
없이는 제대로 동작할 수 없다면 SampleController
입장에서 SampleRepository
는 반드시 있어야 하는 객체인데 이것을 강제할 수 있는 가장 좋은 방법은 생성자 주입 방법을 쓰는 것입니다.