스프링

다양한 의존관계 주입 방법

salmon16 2023. 7. 19. 17:00

의존관계 주입에는 크게 4가지 방법이 있다.

  • 생성자 주입
  • 수정자 주입(setter)
  • 필드 주입
  • 일반 메서드 주입

생성자 주입

생성자를 통해서 의존관계를 주입하는 방법이다.

생성자 호출될 때 딱 1번만 호출된다

불변하고 필수 적인 의존관계에 사용한다.

@Autowired
public MemberServiceImpl(MemberRepository memberRepository) {
    this.memberRepository = memberRepository;
}

보통 생성자 위에 @Autowired애노테이션을 붙여서 사용한다.

근데 생성자가 하나만 존재하면 @Autowired를 생략해도 자동주입이 된다.

수정자 주입

setter메서드를 통해서 의존관계를 주입하는 방법이다.

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

@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
    this.memberRepository = memberRepository;
}

필드 주입

필드에 바로 주입하는 방식인데 외부에서 변경이 불가능해 테스트를 하는데 힘들다.

DI프레임워크가 없으면 아무것도 할 수 없다.

@Autowired
private final MemberRepository memberRepository;
@Autowired
private final DiscountPolicy discountPolicy;

일반 메서드 주입

일반 메스드를 통해 의존관계를 주입하는 방법이다.

잘 사용하지 않는 방법이다.

 

의존관계 주입은 스프링 컨테이너가 관리하는 빈이어야 동작한다.

 

@Autowired에 주입대상이 없으면 오류가 발생하는데 주입할 대상이 없어도 동작하게 크게 3가지 방법이 있다. 

  • @Autowired(required=false) : 자동 주입할 대상이 없으면 메서드 자체가 호출 안됨
  • @Nullable : 자동 주입할 대상이 없으면 null이 입력된다.
  • Optional<> : 자동 주입할 대상이 없으면 Optional.empty가 입력된다.

 

출처 : 인프런 스프링 핵심 원리 - 기본 편  김영한

 

 

 

'스프링' 카테고리의 다른 글

조회 빈이 2개 이상일 때 주입받는 방법  (0) 2023.07.22
생성자 주입의 장점, 룸복사용  (0) 2023.07.21
스프링 빈 필터  (0) 2023.07.18
컴포넌트 스캔 탐색 위치  (0) 2023.07.18
컴포넌트 스캔  (0) 2023.07.17