Spring에서 DI를 구현하기 위해서 네 가지 방법을 지원한다.
method를 통한 방법을 제외하고 @Autowired
를 표기해서 의존성을 자동으로 주입받을 것을 명시해야 한다.
@Autowired
를 붙이게 되면 스프링 컨테이너에서 @Component
로 등록된 빈에서 생성자에 필요한 빈들을 주입해준다.<aside>
📌 생성자의 경우 명확하게 의존 관계를 표현할 수 있는 장점이 있지만, 경우에 따라 문제가 될 수 있다. 예를 들어 A 클래스와 B 클래스가 상호 의존적인 경우 생성자 주입을 사용하면 서로에게 의존성을 주입하려 하지만 어느 것이 먼저 주입되어야 하는지 순서가 명확하지 않으므로(chicken-egg scenario), Circular Dependencies 문제가 발생하게 되며 이 때 BeanCurrentlyInCreationException
예외가 발생하게 된다. 이럴 때에 권장되는 바는 아니지만, 수정자 주입을 통해 해결할 수 있다.
</aside>