크게 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;
}
}
@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라 하는 필드의 값을 변경하는 메서드를 통해 DI하는 방식이다
특징