과거에는 수정자 주입과 필드 주입을 많이 사용했지만, 최근에는 스프링을 포함한 DI 프레임워크 대부분이 생성자 주입을 권장한다. 그 이유는 다음과 같다
프레임워크 없이 순수한 자바 코드를 단위 테스트 하는 경우에 다음과 같이 수정자 의존관계인 경우
'@Autowired'가 프레임워크 안에서 동작할 때는 의존관계가 없으면 오류가 발생하지만, 지금은 프레임워크 없이 순수한 자바 코드로만 단위 테스트를 수행하고 있다
생성자 주입을 사용하면 필드에 'final'키워드를 사용할 수 있다. 그래서 생성자에게 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에 막아준다.
수정자 주입을 포함한 나머지 주입 방식은 모두 생성자 이후에 호출 되므로, 필드에 final키워드를 사용할 수 없다. 오직 생성자 주입 방식만 final 키워드를 사용할 수 있다.