본문 바로가기
김영한님 인강듣고/스프링 핵심원리-기본

의존관계 주입

by doriver 2024. 3. 5.

의존관계 주입 방법들

1. 생성자로 주입

생성자 호출시점에 딱 1번만 호출( 불변, 필수 의존관계에 사용 )

2. 수정자 주입(setter로 주입)

선택, 변경 가능성이 있는 의존관계에 사용

3. 필드에 주입

권장x 

 

의존관계 자동 주입은 

스프링 컨테이너가 관리하는 스프링 빈이어야 동작한다. 
스프링 빈이 아닌 일반클래스에서 @Autowired 코드를 적용해도 아무 기능도 동작하지 않는다

 

 

@Autowired 에서, 자동 주입할 대상이 없는경우( 해당 스프링 빈이 없는 경우 )

1. 그냥 쌩 @Autowired : 오류남( UnsatisfiedDependencyException )
2. @Autowired(required=false) : 해당 메서드 자체가 호출 안됨( 오류x )
3. 메서드 파라미터에 @Nullable : null이 주입됨
4. 메서드 파라미터에 Optional<> : Optional.empty이 주입됨

 

ex) 메서드 파라미터 부분 : ( @Nullable Member noBean2 ) , ( Optional<Member> noBean3 )

 

생성자 주입을 선택해라!

의존관계 불변, 누락방지
필드에 final 키워드를 사용할 수 있다.

최근에는 스프링을 포함한 DI 프레임워크 대부분이 생성자 주입을 권장.

기본으로 생성자 주입을 사용하고

, 필수 값이 아닌 경우에는 수정자 주입 방식을 옵션으로 부여하면 된다.