의존관계 주입에는 크게 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 |