다양한 의존관계 주입 방법


1. 생성자 주입

: 생성자를 통해 의존관계를 주입받는 방식으로 생성자 호출시점에 딱 1번 호출되는것이 보장된다.

💡불변, 필수 의존관계에 사용된다.

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;
    }
}

2. 수정자 주입(Setter 주입)

: Setter를 통해 필드의 값을 수정할 수 있는데(자바 관례인 getter/setter) 이런 수정자 메서드를 통해 의존관계를 주입하는 방법.

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

💡자바빈 프로퍼티 규약의 수정자 메서드 방식(setter)을 사용하는 방법이다.

public class OrderServiceImpl implements OrderService{

    private MemberRepository memberRepository;
    private DiscountPolicy discountPolicy;

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

    @Autowired
    public void setDiscountPolicy(DiscountPolicy discountPolicy) {
        this.discountPolicy = discountPolicy;
    }
}

❗생성자 주입은 스프링 빈에서 해당 클래스를 생성하는 시점에서 생성자를 호출할수밖에없는데 해당 생성자에 파라미더를 전달하기위해서 의존관계를 주입해줘야 한다.