정리자 - 이태혁(Lee, TaeHyuk)
의존관계 주입 방법 - 4가지 존재
→ 위의 4가지 방법에 대해서 하나씩 알아보도록 하자
@Component
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
여태까지 해왔던 방법이 생성자 주입 방법이다. 위와 같이 구현체의 생성자 위에 @Autowired를 달아놓으면 Type을 보고(type으로 식별) 알아서 구현체를 가져와서 주입해준다.
(구현체를 어디서 가져오는데? 스프링 컨테이너에 등록되어 있는 Bean중에 타입이 맞는 것을 가져오는 것)
[특징]
생성자 호출시점에 딱 1번만 호출되는 것이 보장된다
불변, 필수 의존관계에 사용된다. (그래서 private final을 이용하는 것임 → final = constant)
→생성자 주입된 경우 한 번 주입되고 더 이상 불변이다 바꾸면 안된다. 임의로 수정한 method를 만들면 안된다.
@Component
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}