↩뒤로가기

다양한 의존관계 주입 방법

크게 4가지 방법이 있다.

  1. 생성자 주입
  2. 수정자 주입(setter 주입)
  3. 필드 주입
  4. 일반 메서드 주입

생성자 주입

생성자 주입의 특징

<aside> 💡 불변 : 기본적으로 외부에서 변경할 수가 없는 특징을 가지고 있다. 단, 추가적으로 setter 등을 만들어서 강제로 바꿀 수는 있다. 그냥 안만들면 된다. 필수 : 무조건 값을 가지고 있어야 하는 특징이다. final을 사용하므로 기본적으로 값이 반드시 있어야 하고, 생성자가 아닌 외부에서 호출해 값을 변경할 수 없다는 특징이 있다.

</aside>

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

중요! 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입이 된다.(스프링 빈에만 해당)

@Component
public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

		public OrderServiceImpl(){
		}
//이렇게 생성자가 2개 있다면 @Autowired 지정이 필요하다.
    @Autowired
    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }
}

수정자 주입(setter 주입)

흔히 setter라 하는 필드의 값을 변경하는 메서드를 통해 DI하는 방식이다

특징